aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/exception.cpp44
-rw-r--r--src/exception.h22
2 files changed, 66 insertions, 0 deletions
diff --git a/src/exception.cpp b/src/exception.cpp
new file mode 100644
index 0000000..11f04a9
--- /dev/null
+++ b/src/exception.cpp
@@ -0,0 +1,44 @@
1#include "exception.h"
2#include <stdarg.h>
3
4Exception::Exception( const char *lpFormat, ... ) throw() :
5 nErrorCode( 0 )
6{
7 va_list ap;
8 int nSize;
9
10 va_start(ap, lpFormat);
11 nSize = vsnprintf( NULL, 0, lpFormat, ap );
12 sWhat = new char[nSize+1];
13 vsnprintf( sWhat, nSize+1, lpFormat, ap );
14 va_end(ap);
15}
16
17Exception::Exception( int nCode, const char *lpFormat, ... ) throw() :
18 nErrorCode( nCode )
19{
20 va_list ap;
21 int nSize;
22
23 va_start(ap, lpFormat);
24 nSize = vsnprintf( NULL, 0, lpFormat, ap );
25 sWhat = new char[nSize+1];
26 vsnprintf( sWhat, nSize+1, lpFormat, ap );
27 va_end(ap);
28}
29
30Exception::~Exception() throw()
31{
32 delete[] sWhat;
33}
34
35const char *Exception::what() const throw()
36{
37 return sWhat;
38}
39
40int Exception::getErrorCode()
41{
42 return nErrorCode;
43}
44
diff --git a/src/exception.h b/src/exception.h
new file mode 100644
index 0000000..be876d7
--- /dev/null
+++ b/src/exception.h
@@ -0,0 +1,22 @@
1#ifndef EXCEPTION_H
2#define EXCEPTION_H
3
4#include <string>
5#include <exception>
6
7class Exception : public std::exception
8{
9public:
10 Exception( const char *sFormat, ... ) throw();
11 Exception( int nCode, const char *sFormat, ... ) throw();
12 virtual ~Exception() throw();
13
14 virtual const char *what() const throw();
15 int getErrorCode();
16
17private:
18 char *sWhat;
19 int nErrorCode;
20};
21
22#endif