From 29bb82cb8e5c34eba174964099b2cdc04103de7b Mon Sep 17 00:00:00 2001
From: freiro <freiro@users.noreply.github.com>
Date: Thu, 17 Nov 2016 01:33:16 +0100
Subject: Win32 move default user folder location to AppData

---
 src/common/file_util.cpp | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

(limited to 'src/common/file_util.cpp')

diff --git a/src/common/file_util.cpp b/src/common/file_util.cpp
index 407ed047af..8a8ff3092b 100644
--- a/src/common/file_util.cpp
+++ b/src/common/file_util.cpp
@@ -26,6 +26,9 @@
 #define stat _stat64
 #define fstat _fstat64
 #define fileno _fileno
+// Windows version, at least Vista is required to obtain AppData Path
+#define WINVER 0x0600
+#define _WIN32_WINNT 0x0600
 #else
 #ifdef __APPLE__
 #include <sys/param.h>
@@ -594,6 +597,21 @@ std::string& GetExeDirectory() {
     }
     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
 /**
  * @return The user’s 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()) {
 #ifdef _WIN32
         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_CACHE_IDX] = paths[D_USER_IDX] + CACHE_DIR DIR_SEP;
 #else
-- 
cgit v1.2.3-70-g09d2