diff --git a/Source/Core/Common/FileSearch.cpp b/Source/Core/Common/FileSearch.cpp index b5395cf21c31..0598a887a1e1 100644 --- a/Source/Core/Common/FileSearch.cpp +++ b/Source/Core/Common/FileSearch.cpp @@ -2,13 +2,8 @@ // Licensed under GPLv2+ // Refer to the license.txt file included. -#if !__clang__ && __GNUC__ == 4 && __GNUC_MINOR__ < 9 -#error is broken in GCC < 4.9; please upgrade -#endif - #include #include -#include #include "Common/CommonPaths.h" #include "Common/FileSearch.h" @@ -37,20 +32,20 @@ static std::vector FileSearchWithTest(const std::vector DoFileSearch(const std::vector& globs, const std::vector& directories, bool recursive) +std::vector DoFileSearch(const std::vector& exts, const std::vector& directories, bool recursive) { - std::string regex_str = "^("; - for (const auto& str : globs) - { - if (regex_str.size() != 2) - regex_str += "|"; - // convert glob to regex - regex_str += std::regex_replace(std::regex_replace(str, std::regex("\\."), "\\."), std::regex("\\*"), ".*"); - } - regex_str += ")$"; - std::regex regex(regex_str, std::regex_constants::icase); + bool accept_all = (exts.size() == 0) || (std::find(exts.begin(), exts.end(), "") != exts.end()); return FileSearchWithTest(directories, recursive, [&](const File::FSTEntry& entry) { - return std::regex_match(entry.virtualName, regex); + if (accept_all) + return true; + std::string name = entry.virtualName; + std::transform(name.begin(), name.end(), name.begin(), ::tolower); + for (auto& ext : exts) + { + if (name.length() >= ext.length() && name.compare(name.length() - ext.length(), ext.length(), ext) == 0) + return true; + } + return false; }); } diff --git a/Source/Core/Common/FileSearch.h b/Source/Core/Common/FileSearch.h index cb15f84799c7..153408e7ff09 100644 --- a/Source/Core/Common/FileSearch.h +++ b/Source/Core/Common/FileSearch.h @@ -7,5 +7,5 @@ #include #include -std::vector DoFileSearch(const std::vector& globs, const std::vector& directories, bool recursive = false); +std::vector DoFileSearch(const std::vector& exts, const std::vector& directories, bool recursive = false); std::vector FindSubdirectories(const std::vector& directories, bool recursive); diff --git a/Source/Core/Core/HW/GCMemcardDirectory.cpp b/Source/Core/Core/HW/GCMemcardDirectory.cpp index 4a630a4c0306..599a3ee368b7 100644 --- a/Source/Core/Core/HW/GCMemcardDirectory.cpp +++ b/Source/Core/Core/HW/GCMemcardDirectory.cpp @@ -153,7 +153,7 @@ GCMemcardDirectory::GCMemcardDirectory(const std::string& directory, int slot, u hdrfile.ReadBytes(&m_hdr, BLOCK_SIZE); } - std::vector rFilenames = DoFileSearch({"*.gci"}, {m_SaveDirectory}); + std::vector rFilenames = DoFileSearch({".gci"}, {m_SaveDirectory}); if (rFilenames.size() > 112) { diff --git a/Source/Core/DolphinQt/GameList/GameTracker.cpp b/Source/Core/DolphinQt/GameList/GameTracker.cpp index cee3e94a626b..3973af7d1b10 100644 --- a/Source/Core/DolphinQt/GameList/GameTracker.cpp +++ b/Source/Core/DolphinQt/GameList/GameTracker.cpp @@ -91,21 +91,21 @@ void DGameTracker::ScanForGames() std::vector exts; if (SConfig::GetInstance().m_ListGC) { - exts.push_back("*.gcm"); - exts.push_back("*.gcz"); + exts.push_back(".gcm"); + exts.push_back(".gcz"); } if (SConfig::GetInstance().m_ListWii || SConfig::GetInstance().m_ListGC) { - exts.push_back("*.iso"); - exts.push_back("*.ciso"); - exts.push_back("*.wbfs"); + exts.push_back(".iso"); + exts.push_back(".ciso"); + exts.push_back(".wbfs"); } if (SConfig::GetInstance().m_ListWad) - exts.push_back("*.wad"); + exts.push_back(".wad"); if (SConfig::GetInstance().m_ListElfDol) { - exts.push_back("*.dol"); - exts.push_back("*.elf"); + exts.push_back(".dol"); + exts.push_back(".elf"); } auto rFilenames = DoFileSearch(exts, SConfig::GetInstance().m_ISOFolder, SConfig::GetInstance().m_RecursiveISOFolder); diff --git a/Source/Core/DolphinWX/Config/InterfaceConfigPane.cpp b/Source/Core/DolphinWX/Config/InterfaceConfigPane.cpp index 1e3cfb10edf6..e7a0c6e9531a 100644 --- a/Source/Core/DolphinWX/Config/InterfaceConfigPane.cpp +++ b/Source/Core/DolphinWX/Config/InterfaceConfigPane.cpp @@ -162,7 +162,7 @@ void InterfaceConfigPane::LoadGUIValues() void InterfaceConfigPane::LoadThemes() { - auto sv = DoFileSearch({"*"}, { + auto sv = DoFileSearch({}, { File::GetUserPath(D_THEMES_IDX), File::GetSysDirectory() + THEMES_DIR }, /*recursive*/ false); diff --git a/Source/Core/DolphinWX/FrameTools.cpp b/Source/Core/DolphinWX/FrameTools.cpp index 5479902a879b..294819928665 100644 --- a/Source/Core/DolphinWX/FrameTools.cpp +++ b/Source/Core/DolphinWX/FrameTools.cpp @@ -1956,7 +1956,7 @@ void CFrame::GameListChanged(wxCommandEvent& event) SConfig::GetInstance().m_ListDrives = event.IsChecked(); break; case IDM_PURGE_CACHE: - std::vector rFilenames = DoFileSearch({"*.cache"}, {File::GetUserPath(D_CACHE_IDX)}); + std::vector rFilenames = DoFileSearch({".cache"}, {File::GetUserPath(D_CACHE_IDX)}); for (const std::string& rFilename : rFilenames) { diff --git a/Source/Core/DolphinWX/GameListCtrl.cpp b/Source/Core/DolphinWX/GameListCtrl.cpp index 8d5ed1d61a7b..ecf62cd275a2 100644 --- a/Source/Core/DolphinWX/GameListCtrl.cpp +++ b/Source/Core/DolphinWX/GameListCtrl.cpp @@ -465,20 +465,20 @@ void CGameListCtrl::ScanForISOs() std::vector Extensions; if (SConfig::GetInstance().m_ListGC) - Extensions.push_back("*.gcm"); + Extensions.push_back(".gcm"); if (SConfig::GetInstance().m_ListWii || SConfig::GetInstance().m_ListGC) { - Extensions.push_back("*.iso"); - Extensions.push_back("*.ciso"); - Extensions.push_back("*.gcz"); - Extensions.push_back("*.wbfs"); + Extensions.push_back(".iso"); + Extensions.push_back(".ciso"); + Extensions.push_back(".gcz"); + Extensions.push_back(".wbfs"); } if (SConfig::GetInstance().m_ListWad) - Extensions.push_back("*.wad"); + Extensions.push_back(".wad"); if (SConfig::GetInstance().m_ListElfDol) { - Extensions.push_back("*.dol"); - Extensions.push_back("*.elf"); + Extensions.push_back(".dol"); + Extensions.push_back(".elf"); } auto rFilenames = DoFileSearch(Extensions, SConfig::GetInstance().m_ISOFolder, SConfig::GetInstance().m_RecursiveISOFolder); diff --git a/Source/Core/DolphinWX/InputConfigDiag.cpp b/Source/Core/DolphinWX/InputConfigDiag.cpp index b42e94451299..49d58d4ce322 100644 --- a/Source/Core/DolphinWX/InputConfigDiag.cpp +++ b/Source/Core/DolphinWX/InputConfigDiag.cpp @@ -172,7 +172,7 @@ void InputConfigDialog::UpdateProfileComboBox() pname += PROFILES_PATH; pname += m_config.profile_name; - std::vector sv = DoFileSearch({"*.ini"}, {pname}); + std::vector sv = DoFileSearch({".ini"}, {pname}); wxArrayString strs; for (const std::string& filename : sv) diff --git a/Source/Core/VideoBackends/OGL/main.cpp b/Source/Core/VideoBackends/OGL/main.cpp index 1b4ae331b672..2466a5852816 100644 --- a/Source/Core/VideoBackends/OGL/main.cpp +++ b/Source/Core/VideoBackends/OGL/main.cpp @@ -99,7 +99,7 @@ std::string VideoBackend::GetDisplayName() const static std::vector GetShaders(const std::string &sub_dir = "") { - std::vector paths = DoFileSearch({"*.glsl"}, { + std::vector paths = DoFileSearch({".glsl"}, { File::GetUserPath(D_SHADERS_IDX) + sub_dir, File::GetSysDirectory() + SHADERS_DIR DIR_SEP + sub_dir }); diff --git a/Source/Core/VideoCommon/HiresTextures.cpp b/Source/Core/VideoCommon/HiresTextures.cpp index e6f687a551dd..b90dddb5570e 100644 --- a/Source/Core/VideoCommon/HiresTextures.cpp +++ b/Source/Core/VideoCommon/HiresTextures.cpp @@ -84,11 +84,11 @@ void HiresTexture::Update() std::string szDir = StringFromFormat("%s%s", File::GetUserPath(D_HIRESTEXTURES_IDX).c_str(), gameCode.c_str()); std::vector Extensions { - "*.png", - "*.bmp", - "*.tga", - "*.dds", - "*.jpg" // Why not? Could be useful for large photo-like textures + ".png", + ".bmp", + ".tga", + ".dds", + ".jpg" // Why not? Could be useful for large photo-like textures }; auto rFilenames = DoFileSearch(Extensions, {szDir}, /*recursive*/ true);