X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Ffs%2Fdir.cpp;h=066d88bc1fd2c461bae39b5e3700d756f2aaa5b6;hp=bd9eaa59fe06ad933209f5331b12e86a0ae6a0a5;hb=HEAD;hpb=f46cd5456db31f69477bdbb6eec8200151bd42ae diff --git a/source/fs/dir.cpp b/source/fs/dir.cpp index bd9eaa5..0f617e5 100644 --- a/source/fs/dir.cpp +++ b/source/fs/dir.cpp @@ -1,9 +1,6 @@ -#include -#include -#include #include -#include -#include +#include +#include #include #include "dir.h" #include "path.h" @@ -37,16 +34,18 @@ const Path &get_bin_dir(const string &argv0) if(!(argv0==last_argv0)) { Path exe; - if(argv0.find('/')==string::npos) + if(argv0.find(DIRSEP)==string::npos) { - const char *path = getenv("PATH"); - vector dirs = split(path, ITEMSEP); - for(vector::const_iterator i=dirs.begin(); i!=dirs.end(); ++i) - if(exists(Path(*i)/argv0)) - { - exe = realpath(Path(*i)/argv0); - break; - } + string path = getenv("PATH"); + if(!path.empty()) + { + for(const string &d: split(path, ITEMSEP)) + if(exists(Path(d)/argv0)) + { + exe = realpath(Path(d)/argv0); + break; + } + } } if(exe.empty()) @@ -70,9 +69,9 @@ not_a_directory::not_a_directory(const Path &p): void mkpath(const Path &path, int mode) { Path p; - for(Path::Iterator i=path.begin(); i!=path.end(); ++i) + for(const string &c: path) { - p /= *i; + p /= c; #ifdef _WIN32 if(p.size()==1 && p.is_absolute()) continue; @@ -90,10 +89,9 @@ void mkpath(const Path &path, int mode) void rmpath(const Path &path) { - list files = list_files(path); - for(list::iterator i=files.begin(); i!=files.end(); ++i) + for(const string &f: list_files(path)) { - Path p = path / *i; + Path p = path/f; if(is_dir(p)) rmpath(p); else @@ -103,45 +101,16 @@ void rmpath(const Path &path) rmdir(path); } -list list_files(const Path &path) +vector list_files(const Path &path) { return list_filtered(path, string()); } -list list_filtered(const Path &path, const string &filter) -{ - Regex r_filter(filter); - - list result; - DIR *dir = opendir(path.str().c_str()); - if(!dir) - throw system_error("opendir"); - - while(dirent *de = readdir(dir)) - { - const char *fn = de->d_name; - if(fn[0]=='.' && (fn[1]==0 || (fn[1]=='.' && fn[2]==0))) - continue; - if(r_filter.match(fn)) - result.push_back(fn); - } - closedir(dir); - - return result; -} - -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(name); -} - -Path get_sys_conf_dir(const string &argv0) +Path get_sys_conf_dir() { - if(argv0.empty()) - throw invalid_argument("get_sys_conf_dir"); + const char *argv0 = Application::get_argv0(); + if(!argv0) + throw invalid_state("no startup command"); Path dir = get_bin_dir(argv0); @@ -156,63 +125,41 @@ Path get_sys_conf_dir(const string &argv0) return dir; } -Path get_sys_conf_dir() +Path get_sys_data_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"); + throw invalid_state("no startup command"); Path dir = get_bin_dir(argv0); if(dir[-1]=="bin" || dir[-1]=="sbin") - return dir/".."/"share"/appname; + return dir/".."/"share"/Application::get_name(); else if(dir[-1]=="MacOS") return dir/".."/"Resources"; else return dir; } -Path get_sys_data_dir() +Path get_sys_lib_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_lib_dir"); + throw invalid_state("no startup command"); Path dir = get_bin_dir(argv0); if(dir[-1]=="bin" || dir[-1]=="sbin") - return dir/".."/"lib"/appname; + return dir/".."/"lib"/Application::get_name(); else 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()); -} - -Path path_lookup(const string &name, const list &paths) +Path path_lookup(const string &name, const vector &paths) { - for(list::const_iterator i=paths.begin(); i!=paths.end(); ++i) + for(const Path &p: paths) { - Path full = *i/name; + Path full = p/name; if(exists(full)) return realpath(full); } @@ -222,9 +169,9 @@ Path path_lookup(const string &name, const list &paths) Path path_lookup(const string &name) { - const char *path = getenv("PATH"); + string path = getenv("PATH"); vector dirs = split(path, ITEMSEP); - return path_lookup(name, list(dirs.begin(), dirs.end())); + return path_lookup(name, vector(dirs.begin(), dirs.end())); } } // namespace FS