diff --git a/BeefRT/BeefDbg/BeefDbg.vcxproj b/BeefRT/BeefDbg/BeefDbg.vcxproj index f8702896..e358105e 100644 --- a/BeefRT/BeefDbg/BeefDbg.vcxproj +++ b/BeefRT/BeefDbg/BeefDbg.vcxproj @@ -140,6 +140,7 @@ + @@ -356,6 +357,7 @@ + diff --git a/BeefRT/BeefDbg/BeefDbg.vcxproj.filters b/BeefRT/BeefDbg/BeefDbg.vcxproj.filters index 05028bff..a3a371a5 100644 --- a/BeefRT/BeefDbg/BeefDbg.vcxproj.filters +++ b/BeefRT/BeefDbg/BeefDbg.vcxproj.filters @@ -25,6 +25,9 @@ {0027c869-120a-44d3-80e6-e2ab12ce83bc} + + {59aee039-211d-47df-abb4-ca95d75d2c56} + {8e5503bc-1b01-46f1-be03-bb504d93f05d} @@ -105,6 +108,9 @@ BeefySysLib\third_party\utf8proc + + BeefySysLib\third_party\putty + BeefySysLib\util @@ -326,6 +332,9 @@ BeefySysLib\third_party\utf8proc + + BeefySysLib\third_party\putty + BeefySysLib\util diff --git a/BeefRT/BeefRT.vcxproj b/BeefRT/BeefRT.vcxproj index f4e02f8c..4f781e79 100644 --- a/BeefRT/BeefRT.vcxproj +++ b/BeefRT/BeefRT.vcxproj @@ -252,6 +252,7 @@ TurnOffAllWarnings + @@ -271,6 +272,7 @@ + diff --git a/BeefRT/BeefRT.vcxproj.filters b/BeefRT/BeefRT.vcxproj.filters index 2c8d57e8..b911d04f 100644 --- a/BeefRT/BeefRT.vcxproj.filters +++ b/BeefRT/BeefRT.vcxproj.filters @@ -28,6 +28,9 @@ {f94ea9c5-428b-4925-a59e-b7688752d7d7} + + {e790c845-8b10-4edd-b2c0-71e35b0d80b2} + @@ -87,6 +90,9 @@ BeefySysLib\third_party\libffi + + BeefySysLib\third_party\putty + rt @@ -148,6 +154,9 @@ BeefySysLib\third_party\libffi\x86 + + BeefySysLib\third_party\putty + diff --git a/BeefRT/CMakeLists.txt b/BeefRT/CMakeLists.txt index ed65705b..95ed5308 100644 --- a/BeefRT/CMakeLists.txt +++ b/BeefRT/CMakeLists.txt @@ -219,8 +219,9 @@ file(GLOB SRC_FILES ../BeefySysLib/util/BeefPerf.cpp ../BeefySysLib/util/String.cpp ../BeefySysLib/util/UTF8.cpp - ../BeefySysLib/util/Hash.cpp - ../BeefySysLib/third_party/utf8proc/utf8proc.c + ../BeefySysLib/util/Hash.cpp + ../BeefySysLib/third_party/utf8proc/utf8proc.c + ../BeefySysLib/third_party/putty/wildcard.c ) if (${IOS}) diff --git a/BeefySysLib/BeefySysLib.vcxproj b/BeefySysLib/BeefySysLib.vcxproj index d9ee8d82..36f61bf6 100644 --- a/BeefySysLib/BeefySysLib.vcxproj +++ b/BeefySysLib/BeefySysLib.vcxproj @@ -1926,6 +1926,7 @@ copy /y "$(OutDir)$(TargetName).lib" "$(SolutionDir)\BeefLibs\Beefy2D\dist\"TurnOffAllWarnings TurnOffAllWarnings + @@ -2152,6 +2153,7 @@ copy /y "$(OutDir)$(TargetName).lib" "$(SolutionDir)\BeefLibs\Beefy2D\dist\" + diff --git a/BeefySysLib/BeefySysLib.vcxproj.filters b/BeefySysLib/BeefySysLib.vcxproj.filters index 3b2dc190..f766dc93 100644 --- a/BeefySysLib/BeefySysLib.vcxproj.filters +++ b/BeefySysLib/BeefySysLib.vcxproj.filters @@ -78,6 +78,9 @@ {a159b9ee-1a71-44f5-a412-1e01e20b70c7} + + {0007a912-9292-4e32-8884-0f0cd276e42d} + @@ -731,6 +734,9 @@ src\util + + src\third_party\putty + @@ -1123,6 +1129,9 @@ src\util + + src\third_party\putty + diff --git a/BeefySysLib/BeefySysLib_static.vcxproj b/BeefySysLib/BeefySysLib_static.vcxproj index e81e9e3a..66f06622 100644 --- a/BeefySysLib/BeefySysLib_static.vcxproj +++ b/BeefySysLib/BeefySysLib_static.vcxproj @@ -859,6 +859,7 @@ Level1 Level1 + @@ -1025,6 +1026,7 @@ + diff --git a/BeefySysLib/BeefySysLib_static.vcxproj.filters b/BeefySysLib/BeefySysLib_static.vcxproj.filters index 34f64889..62458bbe 100644 --- a/BeefySysLib/BeefySysLib_static.vcxproj.filters +++ b/BeefySysLib/BeefySysLib_static.vcxproj.filters @@ -69,6 +69,9 @@ {d32cb9b0-e79b-49fe-82e2-33302be0baf6} + + {bec18ceb-a7ca-4150-99ee-60a16944b93c} + @@ -584,6 +587,9 @@ src\third_party\miniz + + src\third_party\putty + @@ -898,6 +904,9 @@ src\third_party\miniz + + src\third_party\putty + diff --git a/BeefySysLib/CMakeLists.txt b/BeefySysLib/CMakeLists.txt index 9a1f1e25..13f954dd 100644 --- a/BeefySysLib/CMakeLists.txt +++ b/BeefySysLib/CMakeLists.txt @@ -274,6 +274,7 @@ file(GLOB SRC_FILES third_party/zlib/uncompr.c third_party/zlib/zutil.c third_party/miniz/miniz.c + third_party/putty/wildcard.c util/AllocDebug.cpp util/BeefPerf.cpp util/BSpline.cpp diff --git a/BeefySysLib/platform/posix/PosixCommon.cpp b/BeefySysLib/platform/posix/PosixCommon.cpp index 15b9c611..03f70b4b 100644 --- a/BeefySysLib/platform/posix/PosixCommon.cpp +++ b/BeefySysLib/platform/posix/PosixCommon.cpp @@ -22,6 +22,7 @@ #include "../../util/CritSect.h" #include "../../util/Dictionary.h" #include "../../util/Hash.h" +#include "../../third_party/putty/wildcard.h" #ifdef BFP_HAS_EXECINFO #include #endif @@ -2378,9 +2379,10 @@ static bool BfpFindFileData_CheckFilter(BfpFindFileData* findData) { if ((findData->mFlags & BfpFindFileFlag_Files) == 0) return false; - } + } - //TODO: Check actual wildcards. + if (!wc_match(findData->mWildcard.c_str(), findData->mDirEnt->d_name)) + return false; return true; } diff --git a/BeefySysLib/platform/win/Platform.cpp b/BeefySysLib/platform/win/Platform.cpp index abb61588..9accafd6 100644 --- a/BeefySysLib/platform/win/Platform.cpp +++ b/BeefySysLib/platform/win/Platform.cpp @@ -25,6 +25,7 @@ #include "../util/CritSect.h" #include "../util/Dictionary.h" #include "../util/HashSet.h" +#include "../../third_party/putty/wildcard.h" #include "util/AllocDebug.h" @@ -3485,6 +3486,7 @@ struct BfpFindFileData { BfpFindFileFlags mFlags; WIN32_FIND_DATA mFindData; + Beefy::String mWildcard; HANDLE mHandle; }; @@ -3496,29 +3498,43 @@ static bool BfpFindFileData_CheckFilter(BfpFindFileData* findData) bool isDir = (findData->mFindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0; if (isDir) { - if ((findData->mFlags & BfpFindFileFlag_Directories) != 0) - { - if ((wcscmp(findData->mFindData.cFileName, L".") == 0) || (wcscmp(findData->mFindData.cFileName, L"..") == 0)) - { - return false; - } - return true; - } + if ((findData->mFlags & BfpFindFileFlag_Directories) == 0) + return false; + + if ((wcscmp(findData->mFindData.cFileName, L".") == 0) || (wcscmp(findData->mFindData.cFileName, L"..") == 0)) + return false; } else { - if ((findData->mFlags & BfpFindFileFlag_Files) != 0) - return true; + if ((findData->mFlags & BfpFindFileFlag_Files) == 0) + return false; } - return false; + + Beefy::String fileName = UTF8Encode(findData->mFindData.cFileName); + if (!wc_match(findData->mWildcard.c_str(), fileName.c_str())) + return false; + + return true; } BFP_EXPORT BfpFindFileData* BFP_CALLTYPE BfpFindFileData_FindFirstFile(const char* path, BfpFindFileFlags flags, BfpFileResult* outResult) { - UTF16String wPath = UTF8Decode(path); + Beefy::String findStr = path; + Beefy::String wildcard; + + int lastSlashPos = std::max((int)findStr.LastIndexOf('/'), (int)findStr.LastIndexOf('\\')); + if (lastSlashPos != -1) + { + wildcard = findStr.Substring(lastSlashPos + 1); + findStr = findStr.Substring(0, lastSlashPos + 1); + findStr.Append("*"); + } + if (wildcard == "*.*") + wildcard = "*"; BfpFindFileData* findData = new BfpFindFileData(); findData->mFlags = flags; + findData->mWildcard = wildcard; FINDEX_SEARCH_OPS searchOps; if ((flags & BfpFindFileFlag_Files) == 0) @@ -3526,6 +3542,7 @@ BFP_EXPORT BfpFindFileData* BFP_CALLTYPE BfpFindFileData_FindFirstFile(const cha else searchOps = FindExSearchNameMatch; + UTF16String wPath = UTF8Decode(findStr); findData->mHandle = ::FindFirstFileExW(wPath.c_str(), FindExInfoBasic, &findData->mFindData, searchOps, NULL, 0); if (findData->mHandle == INVALID_HANDLE_VALUE) {