diff options
| author | Silent <zdanio95@gmail.com> | 2019-10-06 22:17:00 +0200 |
|---|---|---|
| committer | Silent <zdanio95@gmail.com> | 2019-10-07 22:46:36 +0200 |
| commit | 689378b435c73b624cfdea8fe971db6b1d72c48e (patch) | |
| tree | 288ab4e01c020bea2af34d90b75dd1bee6ce57e2 /Source/Core/Common/FileUtil.cpp | |
| parent | 3b21d328653f7a472b0f77ef1cc0c85766566b96 (diff) | |
Move GetModuleName to Common
This unifies GetModuleFileName calls between Dolphin and WinUpdater
and allows to gracefully remove MAX_PATH limit from GetExePath
Diffstat (limited to 'Source/Core/Common/FileUtil.cpp')
| -rw-r--r-- | Source/Core/Common/FileUtil.cpp | 37 |
1 files changed, 21 insertions, 16 deletions
diff --git a/Source/Core/Common/FileUtil.cpp b/Source/Core/Common/FileUtil.cpp index 814d891c22..f0594cffcc 100644 --- a/Source/Core/Common/FileUtil.cpp +++ b/Source/Core/Common/FileUtil.cpp @@ -674,22 +674,26 @@ std::string GetBundleDirectory() std::string GetExePath() { - static std::string dolphin_path; - if (dolphin_path.empty()) - { + static const std::string dolphin_path = [] { + std::string result; #ifdef _WIN32 - TCHAR dolphin_exe_path[2048]; - TCHAR dolphin_exe_expanded_path[MAX_PATH]; - GetModuleFileName(nullptr, dolphin_exe_path, ARRAYSIZE(dolphin_exe_path)); - if (_tfullpath(dolphin_exe_expanded_path, dolphin_exe_path, - ARRAYSIZE(dolphin_exe_expanded_path)) != nullptr) - dolphin_path = TStrToUTF8(dolphin_exe_expanded_path); - else - dolphin_path = TStrToUTF8(dolphin_exe_path); + auto dolphin_exe_path = GetModuleName(nullptr); + if (dolphin_exe_path) + { + std::unique_ptr<TCHAR[], decltype(&std::free)> dolphin_exe_expanded_path{ + _tfullpath(nullptr, dolphin_exe_path->c_str(), 0), std::free}; + if (dolphin_exe_expanded_path) + { + result = TStrToUTF8(dolphin_exe_expanded_path.get()); + } + else + { + result = TStrToUTF8(*dolphin_exe_path); + } + } #elif defined(__APPLE__) - dolphin_path = GetBundleDirectory(); - dolphin_path = - dolphin_path.substr(0, dolphin_path.find_last_of("Dolphin.app/Contents/MacOS") + 1); + result = GetBundleDirectory(); + result = result.substr(0, result.find_last_of("Dolphin.app/Contents/MacOS") + 1); #else char dolphin_exe_path[PATH_MAX]; ssize_t len = ::readlink("/proc/self/exe", dolphin_exe_path, sizeof(dolphin_exe_path)); @@ -698,9 +702,10 @@ std::string GetExePath() len = 0; } dolphin_exe_path[len] = '\0'; - dolphin_path = dolphin_exe_path; + result = dolphin_exe_path; #endif - } + return result; + }(); return dolphin_path; } |
