diff --git a/src/openrct2-ui/windows/LoadSave.cpp b/src/openrct2-ui/windows/LoadSave.cpp index cb89a9f3ef..e12fa159fd 100644 --- a/src/openrct2-ui/windows/LoadSave.cpp +++ b/src/openrct2-ui/windows/LoadSave.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -24,9 +25,9 @@ #include #include #include +#include #include #include -#include #include #include #include @@ -746,10 +747,12 @@ static void window_loadsave_sort_list() static void window_loadsave_populate_list(rct_window *w, sint32 includeNewItem, const char *directory, const char *extension) { - safe_strcpy(_directory, directory, sizeof(_directory)); + utf8 absoluteDirectory[MAX_PATH]; + Path::GetAbsolute(absoluteDirectory, Util::CountOf(absoluteDirectory), directory); + safe_strcpy(_directory, absoluteDirectory, Util::CountOf(_directory)); if (_extension != extension) { - safe_strcpy(_extension, extension, sizeof(_extension)); + safe_strcpy(_extension, extension, Util::CountOf(_extension)); } _shortenedDirectory[0] = '\0'; @@ -781,7 +784,7 @@ static void window_loadsave_populate_list(rct_window *w, sint32 includeNewItem, else { // Remove the separator at the end of the path, if present - safe_strcpy(_parentDirectory, directory, sizeof(_parentDirectory)); + safe_strcpy(_parentDirectory, absoluteDirectory, Util::CountOf(_parentDirectory)); if (_parentDirectory[strlen(_parentDirectory) - 1] == *PATH_SEPARATOR || _parentDirectory[strlen(_parentDirectory) - 1] == '/') _parentDirectory[strlen(_parentDirectory) - 1] = '\0'; @@ -816,13 +819,13 @@ static void window_loadsave_populate_list(rct_window *w, sint32 includeNewItem, w->disabled_widgets &= ~(1 << WIDX_NEW_FOLDER); // List all directories - auto subDirectories = Path::GetDirectories(directory); + auto subDirectories = Path::GetDirectories(absoluteDirectory); for (const auto &sdName : subDirectories) { auto subDir = sdName + PATH_SEPARATOR; LoadSaveListItem newListItem; - newListItem.path = Path::Combine(directory, subDir); + newListItem.path = Path::Combine(absoluteDirectory, subDir); newListItem.name = subDir; newListItem.type = TYPE_DIRECTORY; newListItem.loaded = false; @@ -833,15 +836,15 @@ static void window_loadsave_populate_list(rct_window *w, sint32 includeNewItem, // List all files with the wanted extensions char filter[MAX_PATH]; char extCopy[64]; - safe_strcpy(extCopy, extension, sizeof(extCopy)); + safe_strcpy(extCopy, extension, Util::CountOf(extCopy)); char * extToken; bool showExtension = false; extToken = strtok(extCopy, ";"); while (extToken != nullptr) { - safe_strcpy(filter, directory, sizeof(filter)); - safe_strcat_path(filter, "*", sizeof(filter)); - path_append_extension(filter, extToken, sizeof(filter)); + safe_strcpy(filter, directory, Util::CountOf(filter)); + safe_strcat_path(filter, "*", Util::CountOf(filter)); + path_append_extension(filter, extToken, Util::CountOf(filter)); auto scanner = std::unique_ptr(Path::ScanDirectory(filter, false)); while (scanner->Next()) diff --git a/src/openrct2/cmdline/RootCommands.cpp b/src/openrct2/cmdline/RootCommands.cpp index 714a524e6f..31e423c27f 100644 --- a/src/openrct2/cmdline/RootCommands.cpp +++ b/src/openrct2/cmdline/RootCommands.cpp @@ -27,6 +27,7 @@ #include "../core/Memory.hpp" #include "../core/Path.hpp" #include "../core/String.hpp" +#include "../core/Util.hpp" #include "../network/network.h" #include "../object/ObjectRepository.h" #include "../OpenRCT2.h" @@ -197,25 +198,29 @@ exitcode_t CommandLine::HandleCommandDefault() if (_userDataPath != nullptr) { - String::Set(gCustomUserDataPath, sizeof(gCustomUserDataPath), _userDataPath); + utf8 absolutePath[MAX_PATH]{}; + Path::GetAbsolute(absolutePath, Util::CountOf(absolutePath), _userDataPath); + String::Set(gCustomUserDataPath, Util::CountOf(gCustomUserDataPath), absolutePath); Memory::Free(_userDataPath); } if (_openrctDataPath != nullptr) { - String::Set(gCustomOpenrctDataPath, sizeof(gCustomOpenrctDataPath), _openrctDataPath); + utf8 absolutePath[MAX_PATH]{}; + Path::GetAbsolute(absolutePath, Util::CountOf(absolutePath), _openrctDataPath); + String::Set(gCustomOpenrctDataPath, Util::CountOf(gCustomOpenrctDataPath), absolutePath); Memory::Free(_openrctDataPath); } if (_rct2DataPath != nullptr) { - String::Set(gCustomRCT2DataPath, sizeof(gCustomRCT2DataPath), _rct2DataPath); + String::Set(gCustomRCT2DataPath, Util::CountOf(gCustomRCT2DataPath), _rct2DataPath); Memory::Free(_rct2DataPath); } if (_password != nullptr) { - String::Set(gCustomPassword, sizeof(gCustomPassword), _password); + String::Set(gCustomPassword, Util::CountOf(gCustomPassword), _password); Memory::Free(_password); }