From a3e553eae2577e876518b6ffbbe8b6041bcc47ad Mon Sep 17 00:00:00 2001 From: bradleyhughes Date: Wed, 6 Apr 2005 14:04:38 +0000 Subject: [PATCH] add writeDataFile(), writeConfigFile(), and writeCacheFile() to bt::XDG::BaseDir... these are convenience functions that make the basedir-spec easier to implement --- lib/XDG.cc | 34 ++++++++++++++++++++++++++++++++-- lib/XDG.hh | 11 +++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/lib/XDG.cc b/lib/XDG.cc index 750b6be..feabb92 100644 --- a/lib/XDG.cc +++ b/lib/XDG.cc @@ -28,6 +28,7 @@ #include +// make sure directory names end with a slash static std::string terminateDir(const std::string &string) { std::string returnValue = string; @@ -40,7 +41,9 @@ static std::string terminateDir(const std::string &string) static std::string readEnvDir(const char *name, const char *defaultValue) { const char * const env = getenv(name); - return terminateDir(bt::expandTilde(std::string(env ? env : defaultValue))); + std::string returnValue = std::string(env ? env : defaultValue); + returnValue = bt::expandTilde(returnValue); + return terminateDir(returnValue); } static std::list readEnvDirList(const char *name, @@ -97,7 +100,7 @@ std::list bt::XDG::BaseDir::dataDirs() std::list bt::XDG::BaseDir::configDirs() { static std::list XDG_CONFIG_DIRS = - readEnvDirList("XDG_CONFIG_DIRS", "/etc/xdg"); + readEnvDirList("XDG_CONFIG_DIRS", "/etc/xdg/"); return XDG_CONFIG_DIRS; } @@ -107,3 +110,30 @@ std::string bt::XDG::BaseDir::cacheHome() readEnvDir("XDG_CACHE_HOME", "~/.cache/"); return XDG_CACHE_HOME; } + +std::string bt::XDG::BaseDir::writeDataFile(const std::string &filename) +{ + std::string path = dataHome() + filename; + std::string directoryName = dirname(path); + if (!mkdirhier(directoryName, 0700)) + return std::string(); + return path; +} + +std::string bt::XDG::BaseDir::writeConfigFile(const std::string &filename) +{ + std::string path = configHome() + filename; + std::string directoryName = dirname(path); + if (!mkdirhier(directoryName, 0700)) + return std::string(); + return path; +} + +std::string bt::XDG::BaseDir::writeCacheFile(const std::string &filename) +{ + std::string path = cacheHome() + filename; + std::string directoryName = dirname(path); + if (!mkdirhier(directoryName, 0700)) + return std::string(); + return path; +} diff --git a/lib/XDG.hh b/lib/XDG.hh index a3bc470..01869dc 100644 --- a/lib/XDG.hh +++ b/lib/XDG.hh @@ -44,6 +44,17 @@ namespace bt { static std::list dataDirs(); static std::list configDirs(); static std::string cacheHome(); + + /* + These functions return an absolute path to where a particular + type of file can be written, creating directories as needed. + All return an empty string if nothing can be written + (i.e. destination directory does not exist and could not be + created). + */ + static std::string writeDataFile(const std::string &filename); + static std::string writeConfigFile(const std::string &filename); + static std::string writeCacheFile(const std::string &filename); }; } // namespace XDG -- 2.11.4.GIT