forked from ShuriZma/suyu
1
0
Fork 0

Win32 move default user folder location to AppData

This commit is contained in:
freiro 2016-11-17 01:33:16 +01:00 committed by freiro
parent fb13bfe693
commit 29bb82cb8e
2 changed files with 24 additions and 0 deletions

View File

@ -26,6 +26,9 @@
#define stat _stat64 #define stat _stat64
#define fstat _fstat64 #define fstat _fstat64
#define fileno _fileno #define fileno _fileno
// Windows version, at least Vista is required to obtain AppData Path
#define WINVER 0x0600
#define _WIN32_WINNT 0x0600
#else #else
#ifdef __APPLE__ #ifdef __APPLE__
#include <sys/param.h> #include <sys/param.h>
@ -594,6 +597,21 @@ std::string& GetExeDirectory() {
} }
return exe_path; return exe_path;
} }
std::string& AppDataLocalDirectory() {
// Windows Vista or later only
static std::string local_path;
if (local_path.empty()) {
PWSTR pw_local_path = 0;
wchar_t* wchar_local_path;
SHGetKnownFolderPath(FOLDERID_LocalAppData, 0, NULL, &pw_local_path);
wchar_local_path = pw_local_path;
local_path = Common::UTF16ToUTF8(wchar_local_path);
// Freeing memory
CoTaskMemFree(static_cast<void*>(pw_local_path));
}
return local_path;
}
#else #else
/** /**
* @return The users home directory on POSIX systems * @return The users home directory on POSIX systems
@ -671,6 +689,11 @@ const std::string& GetUserPath(const unsigned int DirIDX, const std::string& new
if (paths[D_USER_IDX].empty()) { if (paths[D_USER_IDX].empty()) {
#ifdef _WIN32 #ifdef _WIN32
paths[D_USER_IDX] = GetExeDirectory() + DIR_SEP USERDATA_DIR DIR_SEP; paths[D_USER_IDX] = GetExeDirectory() + DIR_SEP USERDATA_DIR DIR_SEP;
if (!FileUtil::IsDirectory(paths[D_USER_IDX])) {
paths[D_USER_IDX] =
AppDataLocalDirectory() + DIR_SEP + EMU_DATA_DIR DIR_SEP USERDATA_DIR DIR_SEP;
}
paths[D_CONFIG_IDX] = paths[D_USER_IDX] + CONFIG_DIR DIR_SEP; paths[D_CONFIG_IDX] = paths[D_USER_IDX] + CONFIG_DIR DIR_SEP;
paths[D_CACHE_IDX] = paths[D_USER_IDX] + CACHE_DIR DIR_SEP; paths[D_CACHE_IDX] = paths[D_USER_IDX] + CACHE_DIR DIR_SEP;
#else #else

View File

@ -154,6 +154,7 @@ std::string GetBundleDirectory();
#ifdef _WIN32 #ifdef _WIN32
std::string& GetExeDirectory(); std::string& GetExeDirectory();
std::string& AppDataLocalDirectory();
#endif #endif
size_t WriteStringToFile(bool text_file, const std::string& str, const char* filename); size_t WriteStringToFile(bool text_file, const std::string& str, const char* filename);