Allow executable to be at a longer path name on windows

This commit is contained in:
Yousef Khadadeh 2025-11-21 13:15:59 +03:00
parent 45e7910190
commit 9113b56d9d

View file

@ -25,9 +25,17 @@ void switch_cwd() {
std::filesystem::current_path(std::filesystem::path(newCWD));
#elif _WIN32
char buffer[4096];
GetModuleFileName(NULL, buffer, 4096);
std::filesystem::path exePath(buffer);
// https://stackoverflow.com/a/33613252 but UTF-8
constexpr int MAX_PATH_STEP = 2048;
std::string pathStr;
DWORD copied = 0;
do {
pathStr.resize(pathStr.size() + MAX_PATH_STEP);
copied = GetModuleFileName(NULL, pathStr.data(), pathStr.size());
} while(copied >= pathStr.size());
pathStr.resize(copied);
std::filesystem::path exePath(pathStr);
std::filesystem::current_path(exePath.parent_path());
#elif __linux__
std::filesystem::path exePath = std::filesystem::canonical("/proc/self/exe");