aboutsummaryrefslogtreecommitdiff
path: root/src/exceptionbase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/exceptionbase.cpp')
-rw-r--r--src/exceptionbase.cpp70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/exceptionbase.cpp b/src/exceptionbase.cpp
new file mode 100644
index 0000000..f6ec625
--- /dev/null
+++ b/src/exceptionbase.cpp
@@ -0,0 +1,70 @@
1#include "exceptionbase.h"
2#include <stdarg.h>
3
4Bu::ExceptionBase::ExceptionBase( const char *lpFormat, ... ) throw() :
5 nErrorCode( 0 ),
6 sWhat( NULL )
7{
8 va_list ap;
9
10 va_start(ap, lpFormat);
11 setWhat( lpFormat, ap );
12 va_end(ap);
13}
14
15Bu::ExceptionBase::ExceptionBase( int nCode, const char *lpFormat, ... ) throw() :
16 nErrorCode( nCode ),
17 sWhat( NULL )
18{
19 va_list ap;
20
21 va_start(ap, lpFormat);
22 setWhat( lpFormat, ap );
23 va_end(ap);
24}
25
26Bu::ExceptionBase::ExceptionBase( int nCode ) throw() :
27 nErrorCode( nCode ),
28 sWhat( NULL )
29{
30}
31
32Bu::ExceptionBase::~ExceptionBase() throw()
33{
34 if( sWhat )
35 {
36 delete[] sWhat;
37 sWhat = NULL;
38 }
39}
40
41void Bu::ExceptionBase::setWhat( const char *lpFormat, va_list &vargs )
42{
43 if( sWhat ) delete[] sWhat;
44 int nSize;
45
46 nSize = vsnprintf( NULL, 0, lpFormat, vargs );
47 sWhat = new char[nSize+1];
48 vsnprintf( sWhat, nSize+1, lpFormat, vargs );
49}
50
51void Bu::ExceptionBase::setWhat( const char *lpText )
52{
53 if( sWhat ) delete[] sWhat;
54 int nSize;
55
56 nSize = strlen( lpText );
57 sWhat = new char[nSize+1];
58 strcpy( sWhat, lpText );
59}
60
61const char *Bu::ExceptionBase::what() const throw()
62{
63 return sWhat;
64}
65
66int Bu::ExceptionBase::getErrorCode()
67{
68 return nErrorCode;
69}
70