X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Ffs%2Fdir.cpp;h=ffe56708bffeb85552839e6867663470b9b0a418;hp=0b6873277d4feb014d76df62afdde602d0679698;hb=cc7c798b275b8ea9992eb82d68177ecfd50e0974;hpb=2a6afe61db5603d508468adbd538ad4e96acc3fc diff --git a/source/fs/dir.cpp b/source/fs/dir.cpp index 0b68732..ffe5670 100644 --- a/source/fs/dir.cpp +++ b/source/fs/dir.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include #include #include @@ -47,7 +48,8 @@ const Path &get_bin_dir(const string &argv0) break; } } - else + + if(exe.empty()) exe = realpath(argv0); last_argv0 = argv0; @@ -134,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") @@ -149,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") @@ -161,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") @@ -171,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)