#include #include #include #include "config.h" #include "exceptions.h" char * contexts[128]; int clevel = 0; char * Estrdup(char * o) { char * r; if (!(r = strdup(o))) { exception(1, _("Out of memory.")); } return r; } void * Emalloc(size_t s) { void * r; if (!(r = malloc(s))) { exception(1, _("Out of memory.")); } return r; } void pushcontext(char * c) { if (clevel == 128) { exception(1, _("Too much error contexts during pushcontext().")); } contexts[clevel++] = Estrdup(c); } void popcontext(void) { if (clevel == 0) { exception(1, _("Error context empty, but popcontext() called.")); } free(contexts[--clevel]); } void flushcontext(void) { while (clevel) { popcontext(); } } void exception(int level, char *msg) { int i; fprintf(stderr, "Error detected. Showing context.\n"); for (i = 0; i < clevel; i++) { fprintf(stderr, " (%i) - %s\n", i, contexts[i]); } fprintf(stderr, " Error description: %s\n", msg); exit(level); }