X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Ffs%2Fdir.cpp;h=c53c156fec68b6e2df51c2afdb09396281ae92bd;hp=08328548440ae6a18fdf8668d7db2aaeda182c87;hb=19edaf3b45bc4c23459fc8ddd552dcfa33eecc71;hpb=82f9f26dde92ea0e9714fd8878db8dad186ce7af diff --git a/source/fs/dir.cpp b/source/fs/dir.cpp index 0832854..c53c156 100644 --- a/source/fs/dir.cpp +++ b/source/fs/dir.cpp @@ -5,7 +5,7 @@ #ifdef WIN32 #include #endif -#include +#include #include #include #include "dir.h" @@ -54,6 +54,12 @@ const Path &get_bin_dir(const string &argv0) } + +not_a_directory::not_a_directory(const Path &p): + runtime_error(p.str()) +{ } + + void mkdir(const Path &path, int mode) { int err; @@ -66,7 +72,7 @@ void mkdir(const Path &path, int mode) #endif if(err==-1) - throw SystemError("mkdir failed", errno); + throw system_error("mkdir"); } void mkpath(const Path &path, int mode) @@ -84,11 +90,11 @@ void mkpath(const Path &path, int mode) if(err==0) { if(!S_ISDIR(st.st_mode)) - throw Exception("A component exists and is not a directory"); + throw not_a_directory(p); continue; } else if(errno!=ENOENT) - throw SystemError("stat failed", errno); + throw system_error("mkpath:stat"); else mkdir(p, mode); } @@ -97,7 +103,7 @@ void mkpath(const Path &path, int mode) void rmdir(const Path &path) { if(::rmdir(path.str().c_str())==-1) - throw SystemError("rmdir failed", errno); + throw system_error("rmdir"); } void rmdirs(const Path &path) @@ -213,7 +219,7 @@ Path get_sys_lib_dir(const string &argv0, const string &appname) void chdir(const Path &path) { if(::chdir(path.str().c_str())==-1) - throw SystemError("chdir failed", errno); + throw system_error("chdir"); } } // namespace FS