aboutsummaryrefslogtreecommitdiff
path: root/src/filemanager.cpp
diff options
context:
space:
mode:
authorchrodger <45440867+chrodger@users.noreply.github.com>2020-05-29 14:10:37 -0700
committerGitHub <noreply@github.com>2020-05-29 23:10:37 +0200
commitf0baddbe63ba1a0de27e00fc3556eaa1fdc20030 (patch)
tree7ccc8694e1e9b72507b2d635d1adc79d600dedc4 /src/filemanager.cpp
parente9a5addacb4e44b9c1128d4726de4e29e09b40e6 (diff)
downloadPROJ-f0baddbe63ba1a0de27e00fc3556eaa1fdc20030.tar.gz
PROJ-f0baddbe63ba1a0de27e00fc3556eaa1fdc20030.zip
filemanager.cpp: use non-deprecated SHGetKnownFolderPath() function to get the user writable directory on Windows (#2246)
Fixes #2245
Diffstat (limited to 'src/filemanager.cpp')
-rw-r--r--src/filemanager.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/filemanager.cpp b/src/filemanager.cpp
index a5bb779c..33ce4492 100644
--- a/src/filemanager.cpp
+++ b/src/filemanager.cpp
@@ -1203,12 +1203,21 @@ const char *proj_context_get_user_writable_directory(PJ_CONTEXT *ctx,
if (ctx->user_writable_directory.empty()) {
std::string path;
#ifdef _WIN32
+#ifdef __MINGW32__
std::wstring wPath;
wPath.resize(MAX_PATH);
if (SHGetFolderPathW(nullptr, CSIDL_LOCAL_APPDATA, nullptr, 0,
&wPath[0]) == S_OK) {
wPath.resize(wcslen(wPath.data()));
path = NS_PROJ::WStringToUTF8(wPath);
+#else
+ wchar_t* wPath;
+ if (SHGetKnownFolderPath(FOLDERID_LocalAppData, 0, nullptr, &wPath) == S_OK){
+ std::wstring ws(wPath);
+ std::string str = NS_PROJ::WStringToUTF8(ws);
+ path = str;
+ CoTaskMemFree(wPath);
+#endif
} else {
const char *local_app_data = getenv("LOCALAPPDATA");
if (!local_app_data) {