From 131a19d478a98f822ebd1d4b2f1b7b1efc0c69dd Mon Sep 17 00:00:00 2001 From: walker0643 <> Date: Fri, 30 Mar 2018 14:39:12 -0400 Subject: [PATCH] reimplement ArchFile*::getSystemDirectory() as DataDirectories::systemconfig(). windows will now use ProgramData by default rather than C:\Windows --- src/lib/arch/IArchFile.h | 6 ------ src/lib/arch/unix/ArchFileUnix.cpp | 6 ------ src/lib/arch/unix/ArchFileUnix.h | 1 - src/lib/arch/win32/ArchFileWindows.cpp | 14 -------------- src/lib/arch/win32/ArchFileWindows.h | 1 - src/lib/barrier/ServerApp.cpp | 4 ++-- src/lib/common/DataDirectories.h | 4 ++++ src/lib/common/DataDirectories_static.cpp | 7 +++++++ src/lib/common/unix/DataDirectories.cpp | 17 ++++++++++++----- src/lib/common/win32/DataDirectories.cpp | 21 ++++++++++++++++----- 10 files changed, 41 insertions(+), 40 deletions(-) create mode 100644 src/lib/common/DataDirectories_static.cpp diff --git a/src/lib/arch/IArchFile.h b/src/lib/arch/IArchFile.h index a974a1b1..88cb7792 100644 --- a/src/lib/arch/IArchFile.h +++ b/src/lib/arch/IArchFile.h @@ -38,12 +38,6 @@ public: */ virtual const char* getBasename(const char* pathname) = 0; - //! Get system directory - /*! - Returns the ussystem configuration file directory. - */ - virtual std::string getSystemDirectory() = 0; - //! Concatenate path components /*! Concatenate pathname components with a directory separator diff --git a/src/lib/arch/unix/ArchFileUnix.cpp b/src/lib/arch/unix/ArchFileUnix.cpp index 1b13a65e..206f1f18 100644 --- a/src/lib/arch/unix/ArchFileUnix.cpp +++ b/src/lib/arch/unix/ArchFileUnix.cpp @@ -45,12 +45,6 @@ ArchFileUnix::getBasename(const char* pathname) } } -std::string -ArchFileUnix::getSystemDirectory() -{ - return "/etc"; -} - std::string ArchFileUnix::concatPath(const std::string& prefix, const std::string& suffix) diff --git a/src/lib/arch/unix/ArchFileUnix.h b/src/lib/arch/unix/ArchFileUnix.h index 67b27b2a..b39f9827 100644 --- a/src/lib/arch/unix/ArchFileUnix.h +++ b/src/lib/arch/unix/ArchFileUnix.h @@ -27,7 +27,6 @@ class ArchFileUnix : public IArchFile { public: // IArchFile overrides virtual const char* getBasename(const char* pathname); - virtual std::string getSystemDirectory(); virtual std::string concatPath(const std::string& prefix, const std::string& suffix); }; diff --git a/src/lib/arch/win32/ArchFileWindows.cpp b/src/lib/arch/win32/ArchFileWindows.cpp index 022cfe9a..8f362551 100644 --- a/src/lib/arch/win32/ArchFileWindows.cpp +++ b/src/lib/arch/win32/ArchFileWindows.cpp @@ -54,20 +54,6 @@ ArchFileWindows::getBasename(const char* pathname) return basename; } -std::string -ArchFileWindows::getSystemDirectory() -{ - // get windows directory - char dir[MAX_PATH]; - if (GetWindowsDirectory(dir, sizeof(dir)) != 0) { - return dir; - } - else { - // can't get it. use C:\ as a default. - return "C:"; - } -} - std::string ArchFileWindows::concatPath(const std::string& prefix, const std::string& suffix) diff --git a/src/lib/arch/win32/ArchFileWindows.h b/src/lib/arch/win32/ArchFileWindows.h index d00b4aa1..2bfa316d 100644 --- a/src/lib/arch/win32/ArchFileWindows.h +++ b/src/lib/arch/win32/ArchFileWindows.h @@ -27,7 +27,6 @@ class ArchFileWindows : public IArchFile { public: // IArchFile overrides virtual const char* getBasename(const char* pathname); - virtual std::string getSystemDirectory(); virtual std::string concatPath(const std::string& prefix, const std::string& suffix); }; diff --git a/src/lib/barrier/ServerApp.cpp b/src/lib/barrier/ServerApp.cpp index 92f71fbb..240db855 100644 --- a/src/lib/barrier/ServerApp.cpp +++ b/src/lib/barrier/ServerApp.cpp @@ -144,7 +144,7 @@ ServerApp::help() << "If no configuration file pathname is provided then the first of the" << std::endl << "following to load successfully sets the configuration:" << std::endl << " $HOME/" << USR_CONFIG_NAME << std::endl - << " " << ARCH->concatPath(ARCH->getSystemDirectory(), SYS_CONFIG_NAME) << std::endl; + << " " << ARCH->concatPath(DataDirectories::systemconfig(), SYS_CONFIG_NAME) << std::endl; LOG((CLOG_PRINT "%s", buffer.str().c_str())); } @@ -195,7 +195,7 @@ ServerApp::loadConfig() } if (!loaded) { // try the system-wide config file - path = ARCH->getSystemDirectory(); + path = DataDirectories::systemconfig(); if (!path.empty()) { path = ARCH->concatPath(path, SYS_CONFIG_NAME); if (loadConfig(path)) { diff --git a/src/lib/common/DataDirectories.h b/src/lib/common/DataDirectories.h index fd024710..ddb903e4 100644 --- a/src/lib/common/DataDirectories.h +++ b/src/lib/common/DataDirectories.h @@ -14,6 +14,9 @@ public: static const std::string& global(); static const std::string& global(const std::string& path); + static const std::string& systemconfig(); + static const std::string& systemconfig(const std::string& path); + private: // static class DataDirectories() {} @@ -21,5 +24,6 @@ private: static std::string _personal; static std::string _profile; static std::string _global; + static std::string _systemconfig; }; diff --git a/src/lib/common/DataDirectories_static.cpp b/src/lib/common/DataDirectories_static.cpp new file mode 100644 index 00000000..51ed9c7b --- /dev/null +++ b/src/lib/common/DataDirectories_static.cpp @@ -0,0 +1,7 @@ +#include "DataDirectories.h" + +// static member +std::string DataDirectories::_personal; +std::string DataDirectories::_profile; +std::string DataDirectories::_global; +std::string DataDirectories::_systemconfig; diff --git a/src/lib/common/unix/DataDirectories.cpp b/src/lib/common/unix/DataDirectories.cpp index 9d0e66b7..0dc8234e 100644 --- a/src/lib/common/unix/DataDirectories.cpp +++ b/src/lib/common/unix/DataDirectories.cpp @@ -10,11 +10,6 @@ const std::string ProfileSubdir = "/.barrier"; const std::string ProfileSubdir = "/Library/Application Support/Barrier"; #endif -// static members -std::string DataDirectories::_personal; -std::string DataDirectories::_profile; -std::string DataDirectories::_global; - static std::string pw_dir(struct passwd* pwentp) { if (pwentp != NULL && pwentp->pw_dir != NULL) @@ -87,3 +82,15 @@ const std::string& DataDirectories::global(const std::string& path) return _global; } +const std::string& DataDirectories::systemconfig() +{ + if (_systemconfig.empty()) + _systemconfig = "/etc"; + return _systemconfig; +} + +const std::string& DataDirectories::systemconfig(const std::string& path) +{ + _systemconfig = path; + return _systemconfig; +} diff --git a/src/lib/common/win32/DataDirectories.cpp b/src/lib/common/win32/DataDirectories.cpp index 4c171296..5fb36a41 100644 --- a/src/lib/common/win32/DataDirectories.cpp +++ b/src/lib/common/win32/DataDirectories.cpp @@ -2,11 +2,6 @@ #include -// static member -std::string DataDirectories::_personal; -std::string DataDirectories::_profile; -std::string DataDirectories::_global; - std::string unicode_to_mb(const WCHAR* utfStr) { int utfLength = lstrlenW(utfStr); @@ -63,3 +58,19 @@ const std::string& DataDirectories::global(const std::string& path) _global = path; return _global; } + +const std::string& DataDirectories::systemconfig() +{ + // systemconfig() is a special case in that it will track the current value + // of global() unless and until it is explictly set otherwise + // previously it would default to the windows folder which was horrible! + if (_systemconfig.empty()) + return global(); + return _systemconfig; +} + +const std::string& DataDirectories::systemconfig(const std::string& path) +{ + _systemconfig = path; + return _systemconfig; +}