X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Ffs%2Fdir.cpp;h=2ae5122e63768492f54274a7b7062e861445a094;hp=ea0cd952b5a77ad159d625664f6d0ed8991900d4;hb=f2fbac3ccb4960c4a3d057f641c28dba10ebf799;hpb=64b635de88d64a3650136182d7a584aece103e15 diff --git a/source/fs/dir.cpp b/source/fs/dir.cpp index ea0cd95..2ae5122 100644 --- a/source/fs/dir.cpp +++ b/source/fs/dir.cpp @@ -1,12 +1,6 @@ #include -#include -#include -#ifdef WIN32 -#include -#else #include -#include -#endif +#include #include #include #include @@ -62,18 +56,6 @@ not_a_directory::not_a_directory(const Path &p): { } -void mkdir(const Path &path, int mode) -{ -#ifdef WIN32 - (void)mode; - if(!CreateDirectory(path.str().c_str(), NULL)) - throw system_error("CreateDirectory"); -#else - if(::mkdir(path.str().c_str(), mode)==-1) - throw system_error("mkdir"); -#endif -} - void mkpath(const Path &path, int mode) { Path p; @@ -84,9 +66,9 @@ void mkpath(const Path &path, int mode) if(p.size()==1 && p.is_absolute()) continue; #endif - if(exists(p)) + if(FS::Stat st = stat(p)) { - if(!is_dir(p)) + if(!st.is_directory()) throw not_a_directory(p); continue; } @@ -95,17 +77,6 @@ void mkpath(const Path &path, int mode) } } -void rmdir(const Path &path) -{ -#ifdef WIN32 - if(!RemoveDirectory(path.str().c_str())) - throw system_error("RemoveDirectory"); -#else - if(::rmdir(path.str().c_str())==-1) - throw system_error("rmdir"); -#endif -} - void rmpath(const Path &path) { list files = list_files(path); @@ -132,18 +103,18 @@ list list_filtered(const Path &path, const string &filter) list result; DIR *dir = opendir(path.str().c_str()); - if(dir) + if(!dir) + throw system_error("opendir"); + + while(dirent *de = readdir(dir)) { - 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); + 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; } @@ -154,32 +125,6 @@ Path getcwd() return ::getcwd(buf, sizeof(buf)); } -Path get_home_dir() -{ -#ifdef WIN32 - char home[MAX_PATH]; - if(SHGetFolderPath(0, CSIDL_PERSONAL, 0, 0, home)==S_OK) - return home; -#else - const char *home = getenv("HOME"); - if(home) - return home; -#endif - return "."; -} - -Path get_user_data_dir(const string &appname) -{ -#ifdef WIN32 - char datadir[MAX_PATH]; - if(SHGetFolderPath(0, CSIDL_LOCAL_APPDATA, 0, 0, datadir)==S_OK) - return Path(datadir)/appname; - return "."; -#else - return get_home_dir()/("."+appname); -#endif -} - Path get_sys_conf_dir(const string &argv0) { Path dir = get_bin_dir(argv0); @@ -201,6 +146,8 @@ Path get_sys_data_dir(const string &argv0, const string &appname) if(dir[-1]=="bin" || dir[-1]=="sbin") return dir/".."/"share"/appname; + else if(dir[-1]=="MacOS") + return dir/".."/"Resources"; else return dir; }