|
|
|
@ -6,7 +6,6 @@ |
|
|
|
#include <unordered_map>
|
|
|
|
|
|
|
|
#include "common/fs/fs.h"
|
|
|
|
#include "common/string_util.h"
|
|
|
|
#ifdef ANDROID
|
|
|
|
#include "common/fs/fs_android.h"
|
|
|
|
#endif
|
|
|
|
@ -15,7 +14,7 @@ |
|
|
|
#include "common/logging/log.h"
|
|
|
|
|
|
|
|
#ifdef _WIN32
|
|
|
|
#include <shlobj.h> // Used in GetExeDirectory() and GetWindowsDesktop()
|
|
|
|
#include <shlobj.h> // Used in GetExeDirectory()
|
|
|
|
#else
|
|
|
|
#include <cstdlib> // Used in Get(Home/Data)Directory()
|
|
|
|
#include <pwd.h> // Used in GetHomeDirectory()
|
|
|
|
@ -251,25 +250,30 @@ void SetYuzuPath(YuzuPath yuzu_path, const fs::path& new_path) { |
|
|
|
#ifdef _WIN32
|
|
|
|
|
|
|
|
fs::path GetExeDirectory() { |
|
|
|
WCHAR exe_path[MAX_PATH]; |
|
|
|
if (SUCCEEDED(GetModuleFileNameW(nullptr, exe_path, MAX_PATH))) { |
|
|
|
std::wstring wide_exe_path(exe_path); |
|
|
|
return fs::path{Common::UTF16ToUTF8(wide_exe_path)}.parent_path(); |
|
|
|
wchar_t exe_path[MAX_PATH]; |
|
|
|
|
|
|
|
if (GetModuleFileNameW(nullptr, exe_path, MAX_PATH) == 0) { |
|
|
|
LOG_ERROR(Common_Filesystem, |
|
|
|
"Failed to get the path to the executable of the current process"); |
|
|
|
} |
|
|
|
LOG_ERROR(Common_Filesystem, "Failed to get the path to the executable of the current " |
|
|
|
"process"); |
|
|
|
return fs::path{}; |
|
|
|
|
|
|
|
return fs::path{exe_path}.parent_path(); |
|
|
|
} |
|
|
|
|
|
|
|
fs::path GetAppDataRoamingDirectory() { |
|
|
|
PWSTR appdata_roaming_path = nullptr; |
|
|
|
if (SUCCEEDED(SHGetKnownFolderPath(FOLDERID_RoamingAppData, 0, NULL, &appdata_roaming_path))) { |
|
|
|
std::wstring wide_appdata_roaming_path(appdata_roaming_path); |
|
|
|
CoTaskMemFree(appdata_roaming_path); |
|
|
|
return fs::path{Common::UTF16ToUTF8(wide_appdata_roaming_path)}; |
|
|
|
|
|
|
|
SHGetKnownFolderPath(FOLDERID_RoamingAppData, 0, nullptr, &appdata_roaming_path); |
|
|
|
|
|
|
|
auto fs_appdata_roaming_path = fs::path{appdata_roaming_path}; |
|
|
|
|
|
|
|
CoTaskMemFree(appdata_roaming_path); |
|
|
|
|
|
|
|
if (fs_appdata_roaming_path.empty()) { |
|
|
|
LOG_ERROR(Common_Filesystem, "Failed to get the path to the %APPDATA% directory"); |
|
|
|
} |
|
|
|
LOG_ERROR(Common_Filesystem, "Failed to get the path to the %APPDATA% directory"); |
|
|
|
return fs::path{}; |
|
|
|
|
|
|
|
return fs_appdata_roaming_path; |
|
|
|
} |
|
|
|
|
|
|
|
#else
|
|
|
|
|