/** * @brief find files * @param dir path in which to start looking (tried relative to each data directory) * @param pattern pattern to search for * @param recurse whether or not to recursively search * @param include_dirs whether or not to include directory names in the result * @return vector of std::strings containing absolute paths to the files * * Will search for a file given a particular pattern. * Starts from dirpath, descending down if recurse is true. */ std::vector<std::string> UnixFileSystemHandler::FindFiles(const std::string& dir, const std::string& pattern, bool recurse, bool include_dirs) const { // if it's an absolute path, don't look for it in the data directories if (dir[0] == '/') return FindFilesSingleDir(dir, pattern, recurse, include_dirs); std::vector<std::string> match; for (std::vector<DataDir>::const_iterator d = datadirs.begin(); d != datadirs.end(); ++d) { if (d->readable) { std::vector<std::string> submatch = FindFilesSingleDir(d->path + dir, pattern, recurse, include_dirs); match.insert(match.end(), submatch.begin(), submatch.end()); } } return match; }
/** * @brief find files * @param dir path in which to start looking (tried relative to each data directory) * @param pattern pattern to search for * @param recurse whether or not to recursively search * @param include_dirs whether or not to include directory names in the result * @return vector of std::strings containing absolute paths to the files * * Will search for a file given a particular pattern. * Starts from dirpath, descending down if recurse is true. */ std::vector<std::string> UnixFileSystemHandler::FindFiles(const std::string& dir, const std::string& pattern, int flags) const { std::vector<std::string> matches; // if it's an absolute path, don't look for it in the data directories if (dir[0] == '/') { FindFilesSingleDir(matches, dir, pattern, flags); return matches; } for (std::vector<DataDir>::const_reverse_iterator d = datadirs.rbegin(); d != datadirs.rend(); ++d) { if (d->readable) { FindFilesSingleDir(matches, d->path + dir, pattern, flags); } } return matches; }
bool FileSystemHandler::IsFSRoot(const std::string& p) { #ifdef WIN32 if (p.length() >= 2 && p[1] == ':' && ((p[0] >= 'a' && p[0] <= 'z') || (p[0] >= 'A' && p[0] <= 'Z')) && (p.length() == 2 || (p.length() == 3 && (p[2] == '\\' || p[2] == '/')))) { #else if (p.length() == 1 && p[0] == '/') { #endif return true; } return false; } /** * @brief find files * @param dir path in which to start looking (tried relative to each data directory) * @param pattern pattern to search for * @param recurse whether or not to recursively search * @param include_dirs whether or not to include directory names in the result * @return vector of std::strings containing absolute paths to the files * * Will search for a file given a particular pattern. * Starts from dirpath, descending down if recurse is true. */ std::vector<std::string> FileSystemHandler::FindFiles(const std::string& dir, const std::string& pattern, int flags) const { std::vector<std::string> matches; // if it's an absolute path, don't look for it in the data directories if (FileSystemHandler::IsAbsolutePath(dir)) { FindFilesSingleDir(matches, dir, pattern, flags); return matches; } std::string dir2 = RemoveLocalPathPrefix(dir); const std::vector<DataDir>& datadirs = locater.GetDataDirs(); for (std::vector<DataDir>::const_reverse_iterator d = datadirs.rbegin(); d != datadirs.rend(); ++d) { FindFilesSingleDir(matches, d->path + dir2, pattern, flags); } return matches; }
std::vector<std::string> DataDirsAccess::FindFilesInternal(const std::string& dir, const std::string& pattern, int flags) const { std::vector<std::string> matches; // if it is an absolute path, do not look for it in the data directories if (FileSystem::IsAbsolutePath(dir)) { // pass the directory as second directory argument, // so the path gets included in the matches. FindFilesSingleDir(matches, "", dir, pattern, flags); return matches; } std::string dir2 = FileSystem::RemoveLocalPathPrefix(dir); const std::vector<DataDir>& datadirs = dataDirLocater.GetDataDirs(); for (std::vector<DataDir>::const_reverse_iterator d = datadirs.rbegin(); d != datadirs.rend(); ++d) { FindFilesSingleDir(matches, d->path, dir2, pattern, flags); } return matches; }