diff options
author | Andrei Karas <akaras@inbox.ru> | 2017-02-27 19:49:39 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2017-02-27 20:00:41 +0300 |
commit | bf41330551a76ea426ace38dbc57c333ef5112cc (patch) | |
tree | ea543733e0ff5b664923ec90053b2c81f2d3def3 /src/fs/paths.cpp | |
parent | 36c6674db35445d6c72f0f520b4abf9ef15b4da9 (diff) | |
download | manaplus-bf41330551a76ea426ace38dbc57c333ef5112cc.tar.gz manaplus-bf41330551a76ea426ace38dbc57c333ef5112cc.tar.bz2 manaplus-bf41330551a76ea426ace38dbc57c333ef5112cc.tar.xz manaplus-bf41330551a76ea426ace38dbc57c333ef5112cc.zip |
Add function for get home path.
Diffstat (limited to 'src/fs/paths.cpp')
-rw-r--r-- | src/fs/paths.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/fs/paths.cpp b/src/fs/paths.cpp index affc12285..aa1c453b0 100644 --- a/src/fs/paths.cpp +++ b/src/fs/paths.cpp @@ -47,6 +47,11 @@ #include <limits.h> #endif // WIN32 +#ifndef WIN32 +#include <sys/types.h> +#include <pwd.h> +#endif // WIN32 + #ifdef ANDROID #ifdef USE_SDL2 #include <SDL_system.h> @@ -203,6 +208,33 @@ std::string getPicturesDir() #endif // WIN32 } +std::string getHomePath() +{ +#ifdef WIN32 + return getSpecialFolderLocation(CSIDL_LOCAL_APPDATA); +#else + const char *path = getenv("HOME"); + if (path == nullptr) + { + uid_t uid = getuid(); + struct passwd *pw; + + pw = getpwuid(uid); + if (pw != NULL && + pw->pw_dir != nullptr) + { + path = pw->pw_dir; + } + if (path == nullptr) + return "/"; + } + std::string dir = path; + if (findLast(dir, "/") == false) + dir += "/"; + return dir; +#endif // WIN32 +} + #ifdef ANDROID std::string getSdStoragePath() { |