diff --git a/Source/File/FileEnumeration.cpp b/Source/File/FileEnumeration.cpp new file mode 100644 index 00000000..0bdfc2f3 --- /dev/null +++ b/Source/File/FileEnumeration.cpp @@ -0,0 +1,43 @@ +#include "File/FileEnumeration.h" + +#include + +// FUNCTION: fn_18246 +void EnumerateFileNames(std::list& names, const char* directory, const char* pattern) { + std::string search(directory); + search.append(pattern); + WIN32_FIND_DATAA found{}; + HANDLE handle = FindFirstFileA(search.c_str(), &found); + if (handle == INVALID_HANDLE_VALUE) { + FindClose(handle); + return; + } + + do { + if (found.cFileName[0] == '.' && (found.cFileName[1] == 0 || (found.cFileName[1] == '.' && found.cFileName[2] == 0))) { + continue; + } + names.push_back(std::string(found.cFileName)); + } while (FindNextFileA(handle, &found)); + FindClose(handle); +} + +// FUNCTION: fn_18247 +void EnumerateFileNames(std::vector& names, const char* directory, const char* pattern) { + std::string search(directory); + search.append(pattern); + WIN32_FIND_DATAA found{}; + HANDLE handle = FindFirstFileA(search.c_str(), &found); + if (handle == INVALID_HANDLE_VALUE) { + FindClose(handle); + return; + } + + do { + if (found.cFileName[0] == '.' && (found.cFileName[1] == 0 || (found.cFileName[1] == '.' && found.cFileName[2] == 0))) { + continue; + } + names.push_back(std::string(found.cFileName)); + } while (FindNextFileA(handle, &found)); + FindClose(handle); +} diff --git a/Source/File/FileEnumeration.h b/Source/File/FileEnumeration.h new file mode 100644 index 00000000..846a0403 --- /dev/null +++ b/Source/File/FileEnumeration.h @@ -0,0 +1,11 @@ +#ifndef RAGNAROK_SOURCE_FILE_FILEENUMERATION_H +#define RAGNAROK_SOURCE_FILE_FILEENUMERATION_H + +#include +#include +#include + +void EnumerateFileNames(std::list& names, const char* directory, const char* pattern); +void EnumerateFileNames(std::vector& names, const char* directory, const char* pattern); + +#endif diff --git a/compile.json b/compile.json index 706219c4..f12311c7 100644 --- a/compile.json +++ b/compile.json @@ -387,6 +387,7 @@ "Source/Contents/World/WorldViewSpatial.cpp": 3, "Source/File/CommonObject.cpp": 1, "Source/File/File.cpp": 1, + "Source/File/FileEnumeration.cpp": 1, "Source/File/MapName.cpp": 1, "Source/File/ResourcePath.cpp": 1, "Source/File/ShortcutFilename.cpp": 1, @@ -582,18 +583,20 @@ "Source/Utility/Async/NMessageQueue.cpp": 0, "Source/Utility/Async/NObject.cpp": 0, "Source/Utility/Async/NRecycleObjectPoolMgr.cpp": 0, - "Source/Utility/Text/Base64.cpp": 0, + "Source/Utility/Cipher/Rijndael.cpp": 0, + "Source/Utility/Cipher/XorBytes.cpp": 0, "Source/Utility/GuidParse.cpp": 0, + "Source/Utility/Hash/MD5.cpp": 0, + "Source/Utility/Hash/XxHash32.cpp": 0, "Source/Utility/Lexicon/LexiconBoundary.cpp": 0, "Source/Utility/Lexicon/LexiconMatcher.cpp": 0, "Source/Utility/Lexicon/LexiconSerializer.cpp": 0, - "Source/Utility/Hash/MD5.cpp": 0, "Source/Utility/Math/AffineLookAt.cpp": 0, "Source/Utility/Math/AffineMatrix.cpp": 0, "Source/Utility/Math/ClientAngles.cpp": 0, - "Source/Utility/Math/RayTriangle.cpp": 0, "Source/Utility/Math/RadialGrid.cpp": 0, - "Source/Utility/Cipher/Rijndael.cpp": 0, + "Source/Utility/Math/RayTriangle.cpp": 0, + "Source/Utility/Text/Base64.cpp": 0, "Source/Utility/Text/FormatString.cpp": 0, "Source/Utility/Text/GroupedInteger.cpp": 0, "Source/Utility/Text/LanguageCharset.cpp": 0, @@ -602,8 +605,6 @@ "Source/Utility/Threading/NSyncObject.cpp": 0, "Source/Utility/Threading/NThread.cpp": 0, "Source/Utility/Timestamp.cpp": 0, - "Source/Utility/Cipher/XorBytes.cpp": 0, - "Source/Utility/Hash/XxHash32.cpp": 0, "ThirdParty/jsoncpp/src/lib_json/json_reader.cpp": 8, "ThirdParty/jsoncpp/src/lib_json/json_value.cpp": 8, "ThirdParty/jsoncpp/src/lib_json/json_writer.cpp": 8,