aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/common/unix
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/common/unix')
-rw-r--r--src/lib/common/unix/DataDirectories.cpp38
1 files changed, 20 insertions, 18 deletions
diff --git a/src/lib/common/unix/DataDirectories.cpp b/src/lib/common/unix/DataDirectories.cpp
index 72e510a..cf3ca24 100644
--- a/src/lib/common/unix/DataDirectories.cpp
+++ b/src/lib/common/unix/DataDirectories.cpp
@@ -18,11 +18,11 @@
#include "../DataDirectories.h"
#include <unistd.h> // sysconf
-#include <stdlib.h> // getenv
+#include <cstdlib> // getenv
#include <sys/types.h> // getpwuid(_r)
#include <pwd.h> // getpwuid(_r)
-const std::string ProfileSubdir = "/barrier";
+namespace barrier {
static std::string pw_dir(struct passwd* pwentp)
{
@@ -33,7 +33,7 @@ static std::string pw_dir(struct passwd* pwentp)
#ifdef HAVE_GETPWUID_R
-static std::string unix_home()
+static fs::path unix_home()
{
long size = -1;
#if defined(_SC_GETPW_R_SIZE_MAX)
@@ -46,47 +46,47 @@ static std::string unix_home()
struct passwd* pwentp;
std::string buffer(size, 0);
getpwuid_r(getuid(), &pwent, &buffer[0], size, &pwentp);
- return pw_dir(pwentp);
+ return fs::u8path(pw_dir(pwentp));
}
#else // not HAVE_GETPWUID_R
-static std::string unix_home()
+static fs::path unix_home()
{
- return pw_dir(getpwuid(getuid()));
+ return fs::u8path(pw_dir(getpwuid(getuid())));
}
#endif // HAVE_GETPWUID_R
-static std::string profile_basedir()
+static fs::path profile_basedir()
{
#ifdef WINAPI_XWINDOWS
// linux/bsd adheres to freedesktop standards
// https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
- const char* dir = getenv("XDG_DATA_HOME");
+ const char* dir = std::getenv("XDG_DATA_HOME");
if (dir != NULL)
- return dir;
- return unix_home() + "/.local/share";
+ return fs::u8path(dir);
+ return unix_home() / ".local/share";
#else
// macos has its own standards
// https://developer.apple.com/library/content/documentation/General/Conceptual/MOSXAppProgrammingGuide/AppRuntime/AppRuntime.html
- return unix_home() + "/Library/Application Support";
+ return unix_home() / "Library/Application Support";
#endif
}
-const std::string& DataDirectories::profile()
+const fs::path& DataDirectories::profile()
{
if (_profile.empty())
- _profile = profile_basedir() + ProfileSubdir;
+ _profile = profile_basedir() / "barrier";
return _profile;
}
-const std::string& DataDirectories::profile(const std::string& path)
+const fs::path& DataDirectories::profile(const fs::path& path)
{
_profile = path;
return _profile;
}
-const std::string& DataDirectories::global()
+const fs::path& DataDirectories::global()
{
if (_global.empty())
// TODO: where on a unix system should public/global shared data go?
@@ -94,21 +94,23 @@ const std::string& DataDirectories::global()
_global = "/tmp";
return _global;
}
-const std::string& DataDirectories::global(const std::string& path)
+const fs::path& DataDirectories::global(const fs::path& path)
{
_global = path;
return _global;
}
-const std::string& DataDirectories::systemconfig()
+const fs::path& DataDirectories::systemconfig()
{
if (_systemconfig.empty())
_systemconfig = "/etc";
return _systemconfig;
}
-const std::string& DataDirectories::systemconfig(const std::string& path)
+const fs::path& DataDirectories::systemconfig(const fs::path& path)
{
_systemconfig = path;
return _systemconfig;
}
+
+} // namespace barrier