summaryrefslogtreecommitdiff
path: root/lib/Exceptions.cc
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Exceptions.cc')
-rw-r--r--lib/Exceptions.cc550
1 files changed, 275 insertions, 275 deletions
diff --git a/lib/Exceptions.cc b/lib/Exceptions.cc
index 0925b21..2633902 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.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);
-}
+/*
+ * 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.35 2004-11-27 21:46:04 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);
+}