X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Ffs%2Fdir.cpp;h=c53c156fec68b6e2df51c2afdb09396281ae92bd;hp=ad2e013085024fbbcfaf54d3cf154f0a256711a2;hb=19edaf3b45bc4c23459fc8ddd552dcfa33eecc71;hpb=af94bc926e301e9b871dc18662b4fa6e5614fdbf diff --git a/source/fs/dir.cpp b/source/fs/dir.cpp index ad2e013..c53c156 100644 --- a/source/fs/dir.cpp +++ b/source/fs/dir.cpp @@ -1,10 +1,3 @@ -/* $Id$ - -This file is part of libmspfs -Copyright © 2006-2008 Mikko Rasa, Mikkosoft Productions -Distributed under the LGPL -*/ - #include #include #include @@ -12,7 +5,7 @@ Distributed under the LGPL #ifdef WIN32 #include #endif -#include +#include #include #include #include "dir.h" @@ -28,10 +21,8 @@ namespace FS { namespace { -/** -Helper function to determine the location of the program's executable. Caches -the last result to cut down filesystem access with repeated calls. -*/ +/** Helper function to determine the location of the program's executable. +Caches the last result to cut down filesystem access with repeated calls. */ const Path &get_bin_dir(const string &argv0) { static string last_argv0; @@ -63,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; @@ -75,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) @@ -93,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); } @@ -106,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) @@ -222,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