From bf41330551a76ea426ace38dbc57c333ef5112cc Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Mon, 27 Feb 2017 19:49:39 +0300 Subject: Add function for get home path. --- src/fs/paths.cpp | 32 ++++++++++++++++++++++++++++++++ src/fs/paths.h | 2 ++ src/fs/virtfsphys_unittest.cc | 2 ++ 3 files changed, 36 insertions(+) (limited to 'src/fs') 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 #endif // WIN32 +#ifndef WIN32 +#include +#include +#endif // WIN32 + #ifdef ANDROID #ifdef USE_SDL2 #include @@ -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() { diff --git a/src/fs/paths.h b/src/fs/paths.h index fc90730f3..48a6eeea8 100644 --- a/src/fs/paths.h +++ b/src/fs/paths.h @@ -47,4 +47,6 @@ std::string getPackageDir() A_WARN_UNUSED; void setPackageDir(const std::string &dir); +std::string getHomePath(); + #endif // UTILS_PATHS_H diff --git a/src/fs/virtfsphys_unittest.cc b/src/fs/virtfsphys_unittest.cc index 93f86db64..79acaa434 100644 --- a/src/fs/virtfsphys_unittest.cc +++ b/src/fs/virtfsphys_unittest.cc @@ -20,6 +20,7 @@ #include "catch.hpp" +#include "fs/paths.h" #include "fs/virtfs.h" #include "fs/virtfsphys.h" #include "fs/virtfstools.h" @@ -52,6 +53,7 @@ TEST_CASE("VirtFsPhys getUserDir") { VirtFsPhys::initFuncs(); REQUIRE(VirtFsPhys::getUserDir() != nullptr); + REQUIRE(VirtFsPhys::getUserDir() == getHomePath()); } TEST_CASE("VirtFsPhys exists") -- cgit v1.2.3-70-g09d2