X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Ffs%2Funix%2Fdir.cpp;h=a13cbbbffe22b63bbe47efd22f67112fae4f7def;hb=991fabc1956b73a4007859058fb44171000b452e;hp=8169a63fffbe9809af24012ed4ae28101ac881e3;hpb=edf916d784e503505ddac2acef6f3e9a72abb0d6;p=libs%2Fcore.git diff --git a/source/fs/unix/dir.cpp b/source/fs/unix/dir.cpp index 8169a63..a13cbbb 100644 --- a/source/fs/unix/dir.cpp +++ b/source/fs/unix/dir.cpp @@ -1,7 +1,8 @@ -#include #include +#include #include #include +#include #include "dir.h" using namespace std; @@ -21,6 +22,28 @@ void rmdir(const Path &path) throw system_error("rmdir"); } +vector list_filtered(const Path &path, const string &filter) +{ + Regex r_filter(filter); + + vector 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 getcwd() { char buf[1024]; @@ -33,20 +56,5 @@ void chdir(const Path &path) throw system_error("chdir"); } -Path get_home_dir() -{ - const char *home = getenv("HOME"); - if(home) - return home; - return "."; -} - -Path get_user_data_dir(const string &appname) -{ - if(appname.empty()) - throw invalid_argument("get_user_data_dir"); - return get_home_dir()/("."+appname); -} - } // namespace FS } // namespace Msp