]> git.tdb.fi Git - libs/core.git/blobdiff - source/fs/dir.cpp
Zero-arguments overloads and better error checking for get*dir functions
[libs/core.git] / source / fs / dir.cpp
index c0583cc5ca6fd9011065ed24d89e2d788e2cdcd8..ffe56708bffeb85552839e6867663470b9b0a418 100644 (file)
@@ -1,6 +1,7 @@
 #include <cstdlib>
 #include <unistd.h>
 #include <dirent.h>
+#include <msp/core/application.h>
 #include <msp/core/systemerror.h>
 #include <msp/strings/regex.h>
 #include <msp/strings/utils.h>
@@ -135,8 +136,19 @@ Path getcwd()
        return ::getcwd(buf, sizeof(buf));
 }
 
+Path get_user_data_dir()
+{
+       const string &name = Application::get_name();
+       if(name.empty())
+               throw logic_error("application name not known");
+       return get_user_data_dir();
+}
+
 Path get_sys_conf_dir(const string &argv0)
 {
+       if(argv0.empty())
+               throw invalid_argument("get_sys_conf_dir");
+
        Path dir = get_bin_dir(argv0);
 
        if(dir[-1]=="bin" || dir[-1]=="sbin")
@@ -150,8 +162,19 @@ Path get_sys_conf_dir(const string &argv0)
                return dir;
 }
 
+Path get_sys_conf_dir()
+{
+       const char *argv0 = Application::get_argv0();
+       if(!argv0)
+               throw logic_error("no startup command");
+       return get_sys_conf_dir(argv0);
+}
+
 Path get_sys_data_dir(const string &argv0, const string &appname)
 {
+       if(argv0.empty() || appname.empty())
+               throw invalid_argument("get_sys_data_dir");
+
        Path dir = get_bin_dir(argv0);
 
        if(dir[-1]=="bin" || dir[-1]=="sbin")
@@ -162,8 +185,19 @@ Path get_sys_data_dir(const string &argv0, const string &appname)
                return dir;
 }
 
+Path get_sys_data_dir()
+{
+       const char *argv0 = Application::get_argv0();
+       if(!argv0)
+               throw logic_error("no startup command");
+       return get_sys_data_dir(argv0, Application::get_name());
+}
+
 Path get_sys_lib_dir(const string &argv0, const string &appname)
 {
+       if(argv0.empty() || appname.empty())
+               throw invalid_argument("get_sys_data_dir");
+
        Path dir = get_bin_dir(argv0);
 
        if(dir[-1]=="bin" || dir[-1]=="sbin")
@@ -172,6 +206,14 @@ Path get_sys_lib_dir(const string &argv0, const string &appname)
                return dir;
 }
 
+Path get_sys_lib_dir()
+{
+       const char *argv0 = Application::get_argv0();
+       if(!argv0)
+               throw logic_error("no startup command");
+       return get_sys_lib_dir(argv0, Application::get_name());
+}
+
 void chdir(const Path &path)
 {
        if(::chdir(path.str().c_str())==-1)