Use platform-specific methods for exePath

This commit is contained in:
Justin Kinnaird 2019-12-10 03:22:53 -06:00
parent 939bc817e6
commit 08335841be

View file

@ -194,8 +194,21 @@ namespace Utils
void setExePath(const std::string& _path)
{
exePath = getCanonicalPath(_path);
constexpr int path_max = 32767;
#if defined(_WIN32)
std::wstring result(path_max, 0);
if(GetModuleFileNameW(nullptr, &result[0], path_max) != 0)
exePath = convertFromWideString(result);
#else
std::string result(path_max, 0);
if(readlink("/proc/self/exe", &result[0], path_max) != -1)
exePath = result;
#endif
exePath = getCanonicalPath(exePath);
// Fallback to argv[0] if everything else fails
if (exePath.empty())
exePath = getCanonicalPath(_path);
if(isRegularFile(exePath))
exePath = getParent(exePath);