X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Ffs%2Fdir.cpp;h=9c6a97a8318ceaccb77c2d708f7ae65a45f3d951;hb=d91c3450a11c097d34ceba4444758fffe815b61a;hp=ffe56708bffeb85552839e6867663470b9b0a418;hpb=cc7c798b275b8ea9992eb82d68177ecfd50e0974;p=libs%2Fcore.git diff --git a/source/fs/dir.cpp b/source/fs/dir.cpp index ffe5670..9c6a97a 100644 --- a/source/fs/dir.cpp +++ b/source/fs/dir.cpp @@ -130,18 +130,12 @@ list list_filtered(const Path &path, const string &filter) return result; } -Path getcwd() -{ - char buf[1024]; - 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(); + return get_user_data_dir(name); } Path get_sys_conf_dir(const string &argv0) @@ -214,10 +208,23 @@ Path get_sys_lib_dir() return get_sys_lib_dir(argv0, Application::get_name()); } -void chdir(const Path &path) +Path path_lookup(const string &name, const list &paths) +{ + for(list::const_iterator i=paths.begin(); i!=paths.end(); ++i) + { + Path full = *i/name; + if(exists(full)) + return realpath(full); + } + + return Path(); +} + +Path path_lookup(const string &name) { - if(::chdir(path.str().c_str())==-1) - throw system_error("chdir"); + const char *path = getenv("PATH"); + vector dirs = split(path, ITEMSEP); + return path_lookup(name, list(dirs.begin(), dirs.end())); } } // namespace FS