]> git.tdb.fi Git - libs/core.git/blobdiff - source/core/except.cpp
Don't throw on win32 if file has no owner or group
[libs/core.git] / source / core / except.cpp
index 245bc0502c0481b36a218531bb14bff93c2fbc13..41fe3e8c597ecf5157af5f1fda2169ebce3b6545 100644 (file)
@@ -1,24 +1,30 @@
-/* $Id$
-
-This file is part of libmspcore
-Copyright © 2006-2007 Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
 #include <sstream>
+#include <cstring>
+#ifdef WIN32
+#include <windows.h>
+#endif
 #include "except.h"
 
 using namespace std;
 
 namespace Msp {
 
-Exception::Exception(const string &w_):
-       w(w_)
+Exception::Exception(const string &w):
+       wot(w)
 {
 #ifdef WITH_EXCEPTION_BACKTRACE
-       bt=Debug::Backtrace::create();
+       bt = Debug::Backtrace::create();
 #endif
 }
 
+Exception &Exception::at(const std::string &w) throw()
+{
+       wer = w;
+       wot = wer+": "+wot;
+       return *this;
+}
+
+
 SystemError::SystemError(const string &w_, int e):
        Exception(build_what(w_, e)),
        err(e)
@@ -29,11 +35,21 @@ string SystemError::build_what(const string &w, int e)
        ostringstream buf;
        buf<<w<<": ";
 #ifdef WIN32
-       buf<<e;
+       char msg[1024];
+       if(FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, 0, e, 0, msg, sizeof(msg), 0))
+               buf<<msg;
+       else
+               buf<<e;
 #else
        buf<<strerror(e);
 #endif
        return buf.str();
 }
 
+
+KeyError::KeyError(const string &w_, const string &k):
+       Exception(w_+" ("+k+")"),
+       key(k)
+{ }
+
 } // namespace Msp