Skip to content

Commit dd476cc

Browse files
committed
Make GetDirectoryList and GetFileList reentrant
1 parent b62f65c commit dd476cc

File tree

2 files changed

+14
-16
lines changed

2 files changed

+14
-16
lines changed

Managers/LuaMan.cpp

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,8 @@ namespace RTE {
6868
.def("RangeRand", &LuaStateWrapper::RangeRand)
6969
.def("PosRand", &LuaStateWrapper::PosRand)
7070
.def("NormalRand", &LuaStateWrapper::NormalRand)
71-
.def("GetDirectoryList", &LuaStateWrapper::DirectoryList, luabind::return_stl_iterator)
72-
.def("GetFileList", &LuaStateWrapper::FileList, luabind::return_stl_iterator)
71+
.def("GetDirectoryList", &LuaStateWrapper::DirectoryList, luabind::adopt(luabind::return_value) + luabind::return_stl_iterator)
72+
.def("GetFileList", &LuaStateWrapper::FileList, luabind::adopt(luabind::return_value) + luabind::return_stl_iterator)
7373
.def("FileExists", &LuaStateWrapper::FileExists)
7474
.def("FileOpen", &LuaStateWrapper::FileOpen)
7575
.def("FileClose", &LuaStateWrapper::FileClose)
@@ -273,8 +273,8 @@ namespace RTE {
273273
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
274274

275275
// Passthrough LuaMan Functions
276-
const std::vector<std::string>& LuaStateWrapper::DirectoryList(const std::string& relativeDirectory) { return g_LuaMan.DirectoryList(relativeDirectory); }
277-
const std::vector<std::string>& LuaStateWrapper::FileList(const std::string& relativeDirectory) { return g_LuaMan.FileList(relativeDirectory); }
276+
const std::vector<std::string>* LuaStateWrapper::DirectoryList(const std::string& relativeDirectory) { return g_LuaMan.DirectoryList(relativeDirectory); }
277+
const std::vector<std::string>* LuaStateWrapper::FileList(const std::string& relativeDirectory) { return g_LuaMan.FileList(relativeDirectory); }
278278
bool LuaStateWrapper::FileExists(const std::string &fileName) { return g_LuaMan.FileExists(fileName); }
279279
int LuaStateWrapper::FileOpen(const std::string& fileName, const std::string& accessMode) { return g_LuaMan.FileOpen(fileName, accessMode); }
280280
void LuaStateWrapper::FileClose(int fileIndex) { return g_LuaMan.FileClose(fileIndex); }
@@ -923,24 +923,22 @@ namespace RTE {
923923

924924
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
925925

926-
const std::vector<std::string> & LuaMan::DirectoryList(const std::string &filePath) {
927-
thread_local std::vector<std::string> directoryPaths;
928-
directoryPaths.clear();
926+
const std::vector<std::string> * LuaMan::DirectoryList(const std::string &filePath) {
927+
auto *directoryPaths = new std::vector<std::string>();
929928

930929
for (const std::filesystem::directory_entry &directoryEntry : std::filesystem::directory_iterator(System::GetWorkingDirectory() + filePath)) {
931-
if (directoryEntry.is_directory()) { directoryPaths.emplace_back(directoryEntry.path().filename().generic_string()); }
930+
if (directoryEntry.is_directory()) { directoryPaths->emplace_back(directoryEntry.path().filename().generic_string()); }
932931
}
933932
return directoryPaths;
934933
}
935934

936935
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
937936

938-
const std::vector<std::string> & LuaMan::FileList(const std::string &filePath) {
939-
thread_local std::vector<std::string> filePaths;
940-
filePaths.clear();
937+
const std::vector<std::string> * LuaMan::FileList(const std::string &filePath) {
938+
auto *filePaths = new std::vector<std::string>();
941939

942940
for (const std::filesystem::directory_entry &directoryEntry : std::filesystem::directory_iterator(System::GetWorkingDirectory() + filePath)) {
943-
if (directoryEntry.is_regular_file()) { filePaths.emplace_back(directoryEntry.path().filename().generic_string()); }
941+
if (directoryEntry.is_regular_file()) { filePaths->emplace_back(directoryEntry.path().filename().generic_string()); }
944942
}
945943
return filePaths;
946944
}

Managers/LuaMan.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -284,8 +284,8 @@ namespace RTE {
284284
double PosRand();
285285

286286
#pragma region Passthrough LuaMan Functions
287-
const std::vector<std::string>& DirectoryList(const std::string& relativeDirectory);
288-
const std::vector<std::string>& FileList(const std::string& relativeDirectory);
287+
const std::vector<std::string>* DirectoryList(const std::string& relativeDirectory);
288+
const std::vector<std::string>* FileList(const std::string& relativeDirectory);
289289
bool FileExists(const std::string &fileName);
290290
int FileOpen(const std::string& fileName, const std::string& accessMode);
291291
void FileClose(int fileIndex);
@@ -433,15 +433,15 @@ namespace RTE {
433433
/// </summary>
434434
/// <param name="relativeDirectory">Directory path relative to the working directory.</param>
435435
/// <returns>A vector of the directories in relativeDirectory.</returns>
436-
const std::vector<std::string> & DirectoryList(const std::string &relativeDirectory);
436+
const std::vector<std::string> * DirectoryList(const std::string &relativeDirectory);
437437

438438
/// <summary>
439439
/// Returns a vector of all the files in relativeDirectory, which is relative to the working directory.
440440
/// Note that a call to this method overwrites any previously returned vector from DirectoryList() or FileList().
441441
/// </summary>
442442
/// <param name="relativeDirectory">Directory path relative to the working directory.</param>
443443
/// <returns>A vector of the files in relativeDirectory.</returns>
444-
const std::vector<std::string> & FileList(const std::string &relativeDirectory);
444+
const std::vector<std::string> * FileList(const std::string &relativeDirectory);
445445

446446
/// <summary>
447447
/// Returns whether or not the specified file exists. You can only check for files inside .rte folders in the working directory.

0 commit comments

Comments
 (0)