diff options
Diffstat (limited to 'lib/Exceptions.cc')
-rw-r--r-- | lib/Exceptions.cc | 550 |
1 files changed, 275 insertions, 275 deletions
diff --git a/lib/Exceptions.cc b/lib/Exceptions.cc index 06d283d..0925b21 100644 --- a/lib/Exceptions.cc +++ b/lib/Exceptions.cc @@ -1,275 +1,275 @@ -/* - * Baltisot - * Copyright (C) 1999-2003 Nicolas "Pixel" Noble - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* $Id: Exceptions.cc,v 1.33 2004-07-23 16:56:03 pixel Exp $ */ - -#include <string.h> -#include <errno.h> -#include <stddef.h> -#ifdef HAVE_CONFIG_H -#include "config.h" -#ifdef HAVE_MALLOC_H -#include <malloc.h> -#endif -#else -#ifndef __APPLE__ -#include <malloc.h> -#endif -#endif -#ifdef DEBUG -#include <iostream> -#endif -#ifdef HAVE_PIPE -#include <unistd.h> -#endif -#include "BString.h" -#include "Exceptions.h" -#include "generic.h" -#include "gettext.h" - -char GeneralException::t[BUFSIZ]; - -std::vector<String> Base::context; - -GeneralException::GeneralException(String emsg) : msg(emsg.strdup()) { - UNLOCK; -#ifdef DEBUG - printm(M_BARE, String(_("Generating a General Exception error: '")) + msg + "'.\n"); -#endif -} -GeneralException::GeneralException() : msg(0) { - UNLOCK; -#ifdef DEBUG - printm(M_BARE, String(_("Generating a General Exception error: '")) + msg + "'.\n"); -#endif -} -GeneralException::GeneralException(const GeneralException & e) : msg(strdup(e.msg)) { - UNLOCK; -#ifdef DEBUG - printm(M_BARE, String(_("Generating a General Exception error: '")) + msg + "'.\n"); -#endif -} - -GeneralException::~GeneralException() { - free(msg); -} - -TaskNotFound::TaskNotFound() : GeneralException(_("Task not found")) { } - -const char * GeneralException::GetMsg() const { - return msg; -} - -MemoryException::MemoryException(ssize_t s) { - sprintf(t, _("Failed allocating %u bytes."), s); - msg = strdup(t); -} - -IOException::IOException(String fn, op_t op, ssize_t s) { - sprintf(t, _("An error has occured while %s %u bytes on %s: %s"), op == IO_WRITE ? _("writing") : _("reading"), - s, fn.to_charp(), strerror(errno)); - msg = strdup(t); -} - -IOGeneral::IOGeneral(String fn) : GeneralException(fn) { } - -IOGeneral::IOGeneral() { } - -IOAgain::IOAgain() : IOGeneral(_("No more bytes for reading or writing.")) { -#ifdef DEBUG - printm(M_BARE, String(_("Generating an IOAgain exception: '")) + GetMsg() + "'.\n"); -#endif -} - -TaskSwitch::TaskSwitch() : GeneralException(_("Switching task in a non-tasked environnement")) { -#ifdef DEBUG - printm(M_BARE, String(_("Generating a TaskSwitch exception: '")) + GetMsg() + "'.\n"); -#endif -} - -Exit::Exit(int a_code) : GeneralException(_("Exitting with code " + a_code)), code(a_code) { -#ifdef DEBUG - printm(M_BARE, String(_("Generating an Exit exception: '")) + GetMsg() + "'.\n"); -#endif -} - -int Exit::GetCode() { - return code; -} - -char * xstrdup(const char * s) { - char * r; - - r = (char *) xmalloc(strlen(s) + 1); - strcpy(r, s); - return r; -} - -void * xmalloc(size_t s) throw (GeneralException) { - char * r; - - if (s == 0) { - return 0; - } - - if (!(r = (char *) ::malloc(s))) { - throw MemoryException(s); - } -#ifdef DEBUG -// Base::printm(M_BARE, String(_("Allocating %i bytes of memory, got it at %p\n")), s, r); -#endif - - memset(r, 0, s); - - return (void *)(r); -} - -void * xrealloc(void * ptr, size_t s) { -#ifdef DEBUG - void * r = realloc(ptr, s); - Base::printm(M_BARE, String(_("Reallocating pointer at %p for %i bytes, now at %p\n")), ptr, s, r); - return r; -#else - return realloc(ptr, s); -#endif -} - -void xfree(unsigned char *& p) { -#ifdef DEBUG -// Base::printm(M_BARE, String(_("Freeing pointer at %p\n")), p); -#endif - if (p) { - ::free(p); - p = 0; - } -} - -#ifdef HAVE_PIPE -int xpipe(int * p, int flag) throw (GeneralException) { - if (pipe(p)) { - throw GeneralException(String(_("Error creating pipe: ")) + strerror(errno)); - } - - return p[flag]; -} -#else -int xpipe(int *, int) throw (GeneralException) { - throw GeneralException(_("Function pipe() not supported by this system.\n")); -} -#endif - -#ifdef HAVE_FORK -pid_t xfork() throw (GeneralException) { - pid_t p; - - p = fork(); - - if (p == -1) { - throw GeneralException(_("Was not able to fork().\n")); - } - - return p; -} -#else -pid_t xfork() throw (GeneralException) { - throw GeneralException(_("Function fork() not supported by this system.\n")); -} -#endif - -void xexit(int status) throw (GeneralException) { - throw Exit(status); -} - -void xexception(const String & err) throw (GeneralException) { - throw GeneralException(err); -} - -char * Base::strdup(const char * s) { - return xstrdup(s); -} - -void * Base::malloc(ssize_t s) { - return xmalloc(s); -} - -void * Base::realloc(void * p, size_t s) { - return xrealloc(p, s); -} - -void * Base::calloc(size_t n, size_t s) { - return xmalloc(n * s); -} - -void * Base::operator new(size_t s) { -#ifdef DEBUG - printm(M_BARE, _("Operator new(s) called. Allocating memory.\n")); -#endif - return xmalloc(s); -} - -void * Base::operator new(size_t s, void * p) { -#ifdef DEBUG - printm(M_BARE, String(_("Operator new(s, p) called with p = %p and s = %i. Erasing memory.\n")), p, s); -#endif - return memset(p, 0, s); -} - -void Base::operator delete(void * p) { -#ifdef DEBUG - printm(M_BARE, _("Operator delete(p) called. Freeing memory.\n")); -#endif - free(p); -} - -int Base::pipe(int * p, int flag) { - return xpipe(p, flag); -} - -pid_t Base::fork() { - return xfork(); -} - -void Base::exit(int status) { - xexit(status); -} - -void Base::flushcontext() { - context.clear(); -} - -void Base::pushcontext(const String & c) { - context.push_back(c); -} - -void Base::popcontext() { - context.pop_back(); -} - -void Base::exception(const String & err) { - int c; - std::vector<String>::iterator i; - printm(M_ERROR, "Error detected, showing context.\n"); - for (i = context.begin(), c = 0; i != context.end(); i++, c++) { - printm(M_ERROR, " (%i) - " + *i + "\n", c); - } - - printm(M_ERROR, " Error description: " + err); - - xexception(err); -} +/*
+ * Baltisot
+ * Copyright (C) 1999-2003 Nicolas "Pixel" Noble
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/* $Id: Exceptions.cc,v 1.34 2004-11-27 21:35:19 pixel Exp $ */
+
+#include <string.h>
+#include <errno.h>
+#include <stddef.h>
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#ifdef HAVE_MALLOC_H
+#include <malloc.h>
+#endif
+#else
+#ifndef __APPLE__
+#include <malloc.h>
+#endif
+#endif
+#ifdef DEBUG
+#include <iostream>
+#endif
+#ifdef HAVE_PIPE
+#include <unistd.h>
+#endif
+#include "BString.h"
+#include "Exceptions.h"
+#include "generic.h"
+#include "gettext.h"
+
+char GeneralException::t[BUFSIZ];
+
+std::vector<String> Base::context;
+
+GeneralException::GeneralException(String emsg) : msg(emsg.strdup()) {
+ UNLOCK;
+#ifdef DEBUG
+ printm(M_BARE, String(_("Generating a General Exception error: '")) + msg + "'.\n");
+#endif
+}
+GeneralException::GeneralException() : msg(0) {
+ UNLOCK;
+#ifdef DEBUG
+ printm(M_BARE, String(_("Generating a General Exception error: '")) + msg + "'.\n");
+#endif
+}
+GeneralException::GeneralException(const GeneralException & e) : msg(strdup(e.msg)) {
+ UNLOCK;
+#ifdef DEBUG
+ printm(M_BARE, String(_("Generating a General Exception error: '")) + msg + "'.\n");
+#endif
+}
+
+GeneralException::~GeneralException() {
+ free(msg);
+}
+
+TaskNotFound::TaskNotFound() : GeneralException(_("Task not found")) { }
+
+const char * GeneralException::GetMsg() const {
+ return msg;
+}
+
+MemoryException::MemoryException(ssize_t s) {
+ sprintf(t, _("Failed allocating %u bytes."), s);
+ msg = strdup(t);
+}
+
+IOException::IOException(String fn, op_t op, ssize_t s) {
+ sprintf(t, _("An error has occured while %s %u bytes on %s: %s"), op == IO_WRITE ? _("writing") : _("reading"),
+ s, fn.to_charp(), strerror(errno));
+ msg = strdup(t);
+}
+
+IOGeneral::IOGeneral(String fn) : GeneralException(fn) { }
+
+IOGeneral::IOGeneral() { }
+
+IOAgain::IOAgain() : IOGeneral(_("No more bytes for reading or writing.")) {
+#ifdef DEBUG
+ printm(M_BARE, String(_("Generating an IOAgain exception: '")) + GetMsg() + "'.\n");
+#endif
+}
+
+TaskSwitch::TaskSwitch() : GeneralException(_("Switching task in a non-tasked environnement")) {
+#ifdef DEBUG
+ printm(M_BARE, String(_("Generating a TaskSwitch exception: '")) + GetMsg() + "'.\n");
+#endif
+}
+
+Exit::Exit(int a_code) : GeneralException(_("Exitting with code " + a_code)), code(a_code) {
+#ifdef DEBUG
+ printm(M_BARE, String(_("Generating an Exit exception: '")) + GetMsg() + "'.\n");
+#endif
+}
+
+int Exit::GetCode() {
+ return code;
+}
+
+char * xstrdup(const char * s) {
+ char * r;
+
+ r = (char *) xmalloc(strlen(s) + 1);
+ strcpy(r, s);
+ return r;
+}
+
+void * xmalloc(size_t s) throw (GeneralException) {
+ char * r;
+
+ if (s == 0) {
+ return 0;
+ }
+
+ if (!(r = (char *) ::malloc(s))) {
+ throw MemoryException(s);
+ }
+#ifdef DEBUG
+// Base::printm(M_BARE, String(_("Allocating %i bytes of memory, got it at %p\n")), s, r);
+#endif
+
+ memset(r, 0, s);
+
+ return (void *)(r);
+}
+
+void * xrealloc(void * ptr, size_t s) {
+#ifdef DEBUG
+ void * r = realloc(ptr, s);
+ Base::printm(M_BARE, String(_("Reallocating pointer at %p for %i bytes, now at %p\n")), ptr, s, r);
+ return r;
+#else
+ return realloc(ptr, s);
+#endif
+}
+
+void xfree(unsigned char *& p) {
+#ifdef DEBUG
+// Base::printm(M_BARE, String(_("Freeing pointer at %p\n")), p);
+#endif
+ if (p) {
+ ::free(p);
+ p = 0;
+ }
+}
+
+#ifdef HAVE_PIPE
+int xpipe(int * p, int flag) throw (GeneralException) {
+ if (pipe(p)) {
+ throw GeneralException(String(_("Error creating pipe: ")) + strerror(errno));
+ }
+
+ return p[flag];
+}
+#else
+int xpipe(int *, int) throw (GeneralException) {
+ throw GeneralException(_("Function pipe() not supported by this system.\n"));
+}
+#endif
+
+#ifdef HAVE_FORK
+pid_t xfork() throw (GeneralException) {
+ pid_t p;
+
+ p = fork();
+
+ if (p == -1) {
+ throw GeneralException(_("Was not able to fork().\n"));
+ }
+
+ return p;
+}
+#else
+pid_t xfork() throw (GeneralException) {
+ throw GeneralException(_("Function fork() not supported by this system.\n"));
+}
+#endif
+
+void xexit(int status) throw (GeneralException) {
+ throw Exit(status);
+}
+
+void xexception(const String & err) throw (GeneralException) {
+ throw GeneralException(err);
+}
+
+char * Base::strdup(const char * s) {
+ return xstrdup(s);
+}
+
+void * Base::malloc(ssize_t s) {
+ return xmalloc(s);
+}
+
+void * Base::realloc(void * p, size_t s) {
+ return xrealloc(p, s);
+}
+
+void * Base::calloc(size_t n, size_t s) {
+ return xmalloc(n * s);
+}
+
+void * Base::operator new(size_t s) {
+#ifdef DEBUG
+ printm(M_BARE, _("Operator new(s) called. Allocating memory.\n"));
+#endif
+ return xmalloc(s);
+}
+
+void * Base::operator new(size_t s, void * p) {
+#ifdef DEBUG
+ printm(M_BARE, String(_("Operator new(s, p) called with p = %p and s = %i. Erasing memory.\n")), p, s);
+#endif
+ return memset(p, 0, s);
+}
+
+void Base::operator delete(void * p) {
+#ifdef DEBUG
+ printm(M_BARE, _("Operator delete(p) called. Freeing memory.\n"));
+#endif
+ free(p);
+}
+
+int Base::pipe(int * p, int flag) {
+ return xpipe(p, flag);
+}
+
+pid_t Base::fork() {
+ return xfork();
+}
+
+void Base::exit(int status) {
+ xexit(status);
+}
+
+void Base::flushcontext() {
+ context.clear();
+}
+
+void Base::pushcontext(const String & c) {
+ context.push_back(c);
+}
+
+void Base::popcontext() {
+ context.pop_back();
+}
+
+void Base::exception(const String & err) {
+ int c;
+ std::vector<String>::iterator i;
+ printm(M_ERROR, "Error detected, showing context.\n");
+ for (i = context.begin(), c = 0; i != context.end(); i++, c++) {
+ printm(M_ERROR, " (%i) - " + *i + "\n", c);
+ }
+
+ printm(M_ERROR, " Error description: " + err);
+
+ xexception(err);
+}
|