diff options
| author | Jordan Woyak <jordan.woyak@gmail.com> | 2013-01-13 15:32:26 -0600 |
|---|---|---|
| committer | Jordan Woyak <jordan.woyak@gmail.com> | 2013-01-13 15:32:26 -0600 |
| commit | a9ff3709e485a4f38189c694c540652468cc1d19 (patch) | |
| tree | 56c7d7982d29e989fd89b1a309a08db8122e9f05 /Source/Core/Common/Src/FileSearch.cpp | |
| parent | 6f7b11b9bebf4a80a6d09d344c312241a9abe16e (diff) | |
Attempt to make file searching stuff less crappy on Linux.
Supports a * search now.
Diffstat (limited to 'Source/Core/Common/Src/FileSearch.cpp')
| -rw-r--r-- | Source/Core/Common/Src/FileSearch.cpp | 35 |
1 files changed, 18 insertions, 17 deletions
diff --git a/Source/Core/Common/Src/FileSearch.cpp b/Source/Core/Common/Src/FileSearch.cpp index c60ce9beda..595dfe7000 100644 --- a/Source/Core/Common/Src/FileSearch.cpp +++ b/Source/Core/Common/Src/FileSearch.cpp @@ -25,6 +25,7 @@ #endif #include <string> +#include <algorithm> #include "FileSearch.h" @@ -72,36 +73,36 @@ void CFileSearch::FindFiles(const std::string& _searchString, const std::string& #else - size_t dot_pos = _searchString.rfind("."); + // TODO: super lame/broken - if (dot_pos == std::string::npos) - return; + auto end_match(_searchString); + + // assuming we have a "*.blah"-like pattern + if (!end_match.empty() && end_match[0] == '*') + end_match.erase(0, 1); + + // ugly + if (end_match == ".*") + end_match.clear(); - std::string ext = _searchString.substr(dot_pos); DIR* dir = opendir(_strPath.c_str()); if (!dir) return; - dirent* dp; - - while (true) + while (auto const dp = readdir(dir)) { - dp = readdir(dir); - - if (!dp) - break; - - std::string s(dp->d_name); + std::string found(dp->d_name); - if ( (!ext.compare(".*") && s.compare(".") && s.compare("..")) || - ((s.size() > ext.size()) && (!strcasecmp(s.substr(s.size() - ext.size()).c_str(), ext.c_str())) )) + if ((found != ".") && (found != "..") + && (found.size() >= end_match.size()) + && std::equal(end_match.rbegin(), end_match.rend(), found.rbegin())) { std::string full_name; if (_strPath.c_str()[_strPath.size()-1] == DIR_SEP_CHR) - full_name = _strPath + s; + full_name = _strPath + found; else - full_name = _strPath + DIR_SEP + s; + full_name = _strPath + DIR_SEP + found; m_FileNames.push_back(full_name); } |
