]> git.tdb.fi Git - libs/core.git/commitdiff
Exception rework for fs components
authorMikko Rasa <tdb@tdb.fi>
Thu, 28 Jul 2011 12:10:13 +0000 (15:10 +0300)
committerMikko Rasa <tdb@tdb.fi>
Thu, 28 Jul 2011 12:10:13 +0000 (15:10 +0300)
source/fs/dir.cpp
source/fs/dir.h
source/fs/path.cpp
source/fs/stat.cpp
source/fs/utils.cpp

index 08328548440ae6a18fdf8668d7db2aaeda182c87..c53c156fec68b6e2df51c2afdb09396281ae92bd 100644 (file)
@@ -5,7 +5,7 @@
 #ifdef WIN32
 #include <shlobj.h>
 #endif
-#include <msp/core/except.h>
+#include <msp/core/systemerror.h>
 #include <msp/strings/regex.h>
 #include <msp/strings/utils.h>
 #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
index 5544a3179b912e9d7f14a4687095aaeabd7a547d..6fa49f95d89c6abf02e12735dc2c7e2a0a5664e6 100644 (file)
@@ -8,6 +8,13 @@
 namespace Msp {
 namespace FS {
 
+class not_a_directory: public std::runtime_error
+{
+public:
+       not_a_directory(const Path &);
+       virtual ~not_a_directory() throw() { }
+};
+
 /// Creates a directory
 void mkdir(const Path &path, int mode);
 
index 52b1da2241dc9a762dbab76a6caa2a0f9bfa3478..784c6eb508cbd953629e0b3819ea82667e083566 100644 (file)
@@ -1,4 +1,4 @@
-#include <msp/core/except.h>
+#include <stdexcept>
 #include <msp/strings/utils.h>
 #include "path.h"
 #include "utils.h"
@@ -103,7 +103,7 @@ string Path::operator[](int n) const
                }
        }
 
-       throw InvalidParameterValue("Path component index out of range");
+       throw invalid_argument("Path::operator[]");
 }
 
 bool Path::operator==(const Path &p) const
index 867256e6d8e2d404f6e32e298027730ead262a08..ccd344b875e809ecdbf3016e96d4576ab0c898dc 100644 (file)
@@ -1,8 +1,7 @@
-#include <cerrno>
 #ifdef WIN32
 #include <io.h>
 #endif
-#include <msp/core/except.h>
+#include <msp/core/systemerror.h>
 #include "path.h"
 #include "stat.h"
 
@@ -18,7 +17,7 @@ struct stat stat(const Path &fn)
 {
        struct stat st;
        if(stat(fn, st)==-1)
-               throw SystemError("stat failed", errno);
+               throw system_error("stat");
        return st;
 }
 
@@ -35,7 +34,7 @@ struct stat lstat(const Path &fn)
 {
        struct stat st;
        if(lstat(fn, st)==-1)
-               throw SystemError("lstat failed", errno);
+               throw system_error("lstat");
        return st;
 }
 
index 0c29a5306cf591d7f10abf053c65651804f6a942..d34a750903a45dd64864e11f56cd48947a097fb9 100644 (file)
@@ -1,6 +1,5 @@
-#include <cerrno>
 #include <cstdio>
-#include <msp/core/except.h>
+#include <msp/core/systemerror.h>
 #ifndef WIN32
 #include <fnmatch.h>
 #else
@@ -83,12 +82,12 @@ Path readlink(const Path &link)
 {
 #ifdef WIN32
        (void)link;
-       throw Exception("No symbolic links on win32");
+       throw logic_error("no symbolic links on win32");
 #else
        char buf[4096];
        int len = ::readlink(link.str().c_str(), buf, sizeof(buf));
        if(len==-1)
-               throw SystemError("readlink failed", errno);
+               throw system_error("readlink");
        return string(buf, len);
 #endif
 }
@@ -119,7 +118,7 @@ Path realpath(const Path &path)
                if(S_ISLNK(st.st_mode))
                {
                        if(++n_links>64)
-                               throw Exception("Ludicrous amount of symlinks detected in realpath, giving up");
+                               throw runtime_error("too many symbolic links");
                        Path link = readlink(next);
                        queue.insert(queue.begin(), link.begin(), link.end());
                }
@@ -134,13 +133,13 @@ Path realpath(const Path &path)
 void rename(const Path &from, const Path &to)
 {
        if(::rename(from.str().c_str(), to.str().c_str())==-1)
-               throw SystemError("rename failed", errno);
+               throw system_error("rename");
 }
 
 void unlink(const Path &path)
 {
        if(::unlink(path.str().c_str())==-1)
-               throw SystemError("unlink failed", errno);
+               throw system_error("unlink");
 }
 
 Path relative(const Path &path, const Path &base)