summaryrefslogtreecommitdiffstats
path: root/mmc_updater/src/StandardDirs.cpp
diff options
context:
space:
mode:
authorAndrew <forkk@forkk.net>2013-12-09 12:04:05 -0600
committerAndrew <forkk@forkk.net>2013-12-09 12:04:05 -0600
commit7f52bed9e3f559adcbcf3f3c1c7ac2251964db8c (patch)
tree52097b57dc7d18ec4e35ef3a8e554af2d91545e8 /mmc_updater/src/StandardDirs.cpp
parent9410dd042ea62224fa3e0eb3b525abbdf0c316ee (diff)
parent220e07aef4a34dca9f31ae0c5bb994e5c594125d (diff)
downloadMultiMC-7f52bed9e3f559adcbcf3f3c1c7ac2251964db8c.tar
MultiMC-7f52bed9e3f559adcbcf3f3c1c7ac2251964db8c.tar.gz
MultiMC-7f52bed9e3f559adcbcf3f3c1c7ac2251964db8c.tar.lz
MultiMC-7f52bed9e3f559adcbcf3f3c1c7ac2251964db8c.tar.xz
MultiMC-7f52bed9e3f559adcbcf3f3c1c7ac2251964db8c.zip
Merge branch 'feature_updater' into develop
Diffstat (limited to 'mmc_updater/src/StandardDirs.cpp')
-rw-r--r--mmc_updater/src/StandardDirs.cpp63
1 files changed, 63 insertions, 0 deletions
diff --git a/mmc_updater/src/StandardDirs.cpp b/mmc_updater/src/StandardDirs.cpp
new file mode 100644
index 00000000..72743d5e
--- /dev/null
+++ b/mmc_updater/src/StandardDirs.cpp
@@ -0,0 +1,63 @@
+#include "StandardDirs.h"
+
+#include "FileUtils.h"
+#include "StringUtils.h"
+
+#ifdef PLATFORM_UNIX
+ #include <stdlib.h>
+ #include <pwd.h>
+ #include <unistd.h>
+#endif
+
+#ifdef PLATFORM_WINDOWS
+#include <shlobj.h>
+#endif
+
+#ifdef PLATFORM_UNIX
+std::string StandardDirs::homeDir()
+{
+ std::string dir = notNullString(getenv("HOME"));
+ if (!dir.empty())
+ {
+ return dir;
+ }
+ else
+ {
+ // note: if this process has been elevated with sudo,
+ // this will return the home directory of the root user
+ struct passwd* userData = getpwuid(getuid());
+ return notNullString(userData->pw_dir);
+ }
+}
+#endif
+
+std::string StandardDirs::appDataPath(const std::string& organizationName,
+ const std::string& appName)
+{
+#ifdef PLATFORM_LINUX
+ std::string xdgDataHome = notNullString(getenv("XDG_DATA_HOME"));
+ if (xdgDataHome.empty())
+ {
+ xdgDataHome = homeDir() + "/.local/share";
+ }
+ xdgDataHome += "/data/" + organizationName + '/' + appName;
+ return xdgDataHome;
+
+#elif defined(PLATFORM_MAC)
+ std::string path = applicationSupportFolderPath();
+ path += '/' + appName;
+ return path;
+#elif defined(PLATFORM_WINDOWS)
+ char buffer[MAX_PATH + 1];
+ if (SHGetFolderPath(0, CSIDL_LOCAL_APPDATA, 0 /* hToken */, SHGFP_TYPE_CURRENT, buffer) == S_OK)
+ {
+ std::string path = FileUtils::toUnixPathSeparators(notNullString(buffer));
+ path += '/' + organizationName + '/' + appName;
+ return path;
+ }
+ else
+ {
+ return std::string();
+ }
+#endif
+}