~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to plugin/pbms/src/cslib/CSException.cc

  • Committer: Lee Bieber
  • Date: 2010-10-22 16:47:38 UTC
  • mfrom: (1841.1.7 drizzle_pbms)
  • Revision ID: kalebral@gmail.com-20101022164738-vv8w22b8towpb307
Merge Barry - fix bug 657830: PBMS build failure in GCC 4.5

Show diffs side-by-side

added added

removed removed

Lines of Context:
27
27
 
28
28
#include "CSConfig.h"
29
29
 
 
30
#ifdef OS_WINDOWS
 
31
#define strsignal(s) NULL
 
32
#else
30
33
#include <sys/signal.h>
 
34
#endif
 
35
 
31
36
#include <limits.h>
32
37
#include <string.h>
33
38
 
68
73
        CSL.log(self, CSLog::Error, " ");
69
74
        CSL.log(self, CSLog::Error, getMessage());
70
75
        CSL.eol(self, CSLog::Error);
 
76
#ifdef DUMP_STACK_TRACE
71
77
        CSL.log(self, CSLog::Error, getStackTrace());
 
78
#endif
72
79
        CSL.unlock();
73
80
}
74
81
 
81
88
        CSL.log(self, CSLog::Error, " ");
82
89
        CSL.log(self, CSLog::Error, getMessage());
83
90
        CSL.eol(self, CSLog::Error);
 
91
#ifdef DUMP_STACK_TRACE
84
92
        CSL.log(self, CSLog::Error, getStackTrace());
 
93
#endif
85
94
        CSL.unlock();
86
95
}
87
96
 
 
97
void CSException::initException_va(const char *func, const char *file, int line, int err, const char *fmt, va_list ap)
 
98
{
 
99
 
 
100
        cs_format_context(CS_EXC_CONTEXT_SIZE, iContext, func, file, line);
 
101
        iErrorCode = err;
 
102
#ifdef OS_WINDOWS
 
103
        vsprintf(iMessage, fmt, ap);
 
104
#else
 
105
        size_t len;
 
106
        len = vsnprintf(iMessage, CS_EXC_MESSAGE_SIZE-1, fmt, ap);
 
107
        if (len > CS_EXC_MESSAGE_SIZE-1)
 
108
                len = CS_EXC_MESSAGE_SIZE-1;
 
109
        iMessage[len] = 0;
 
110
#endif
 
111
}
 
112
 
 
113
void CSException::initExceptionf(const char *func, const char *file, int line, int err, const char *fmt, ...)
 
114
{
 
115
        va_list ap;
 
116
 
 
117
        va_start(ap, fmt);
 
118
        initException_va(func, file, line, err, fmt, ap);
 
119
        va_end(ap);
 
120
}
 
121
 
88
122
void CSException::initException(const char *func, const char *file, int line, int err, const char *message)
89
123
{
90
124
        cs_format_context(CS_EXC_CONTEXT_SIZE, iContext, func, file, line);
107
141
{
108
142
        cs_format_context(CS_EXC_CONTEXT_SIZE, iContext, func, file, line);
109
143
        iErrorCode = CS_ERR_ASSERTION;
110
 
        cs_strcpy(CS_EXC_MESSAGE_SIZE, iMessage, message);
 
144
        cs_strcpy(CS_EXC_MESSAGE_SIZE, iMessage, "Assertion failed: ");
 
145
        cs_strcat(CS_EXC_MESSAGE_SIZE, iMessage, message);
111
146
}
112
147
 
113
148
void CSException::getCoreError(uint32_t size, char *buffer, int err)
146
181
        cs_format_context(CS_EXC_CONTEXT_SIZE, iContext, func, file, line);
147
182
        iErrorCode = err;
148
183
        getCoreError(CS_EXC_MESSAGE_SIZE, iMessage, err);
149
 
        cs_replace_string(CS_EXC_MESSAGE_SIZE, iMessage, '%', item);
 
184
        cs_replace_string(CS_EXC_MESSAGE_SIZE, iMessage, "%s", item);
150
185
}
151
186
 
152
187
void CSException::initOSError(const char *func, const char *file, int line, int err)
254
289
        else {
255
290
                CSException e;
256
291
                
257
 
                e.initException(func, file, line, err,message);
 
292
                e.initException(func, file, line, err, message);
258
293
                e.log(NULL, "*** Uncaught error");
259
294
        }
260
295
}
264
299
        throwException(func, file, line, err, message, NULL);
265
300
}
266
301
 
 
302
void CSException::throwExceptionf(const char *func, const char *file, int line, int err, const char *fmt, ...)
 
303
{
 
304
        CSThread        *self;
 
305
        va_list         ap;
 
306
 
 
307
        va_start(ap, fmt);
 
308
        if ((self = CSThread::getSelf())) {
 
309
                self->myException.initException_va(func, file, line, err, fmt, ap);
 
310
                va_end(ap);
 
311
                self->myException.setStackTrace(self, NULL);
 
312
                self->throwException();
 
313
        }
 
314
        else {
 
315
                CSException e;
 
316
                
 
317
                e.initException_va(func, file, line, err, fmt, ap);
 
318
                va_end(ap);
 
319
                e.log(NULL, "*** Uncaught error");
 
320
        }
 
321
}
 
322
 
267
323
void CSException::throwAssertion(const char *func, const char *file, int line, const char *message)
268
324
{
269
325
        CSThread *self;
271
327
        if ((self = CSThread::getSelf())) {
272
328
                self->myException.initAssertion(func, file, line, message);
273
329
                self->myException.setStackTrace(self);
 
330
                /* Not sure why we log the excpetion down here?!
274
331
                self->logException();
 
332
                */
275
333
                self->throwException();
276
334
        }
277
335
        else {
412
470
void CSException::throwLastError(const char *func, const char *file, int line)
413
471
{
414
472
#ifdef OS_WINDOWS
415
 
        throwOSError(func, file, line, (int) getLastError());
 
473
        throwOSError(func, file, line, (int) GetLastError());
416
474
#else
417
475
        throwOSError(func, file, line, (int) errno);
418
476
#endif