garbeam@2: /* garbeam@2: * (C)opyright MMVI Anselm R. Garbe garbeam@2: * See LICENSE file for license details. garbeam@2: */ garbeam@2: garbeam@2: #include garbeam@2: #include garbeam@2: #include garbeam@3: #include garbeam@2: garbeam@2: void garbeam@2: error(char *errstr, ...) { garbeam@2: va_list ap; garbeam@2: va_start(ap, errstr); garbeam@2: vfprintf(stderr, errstr, ap); garbeam@2: va_end(ap); garbeam@2: exit(1); garbeam@2: } garbeam@2: garbeam@3: static void garbeam@3: bad_malloc(unsigned int size) garbeam@3: { garbeam@3: fprintf(stderr, "fatal: could not malloc() %d bytes\n", garbeam@3: (int) size); garbeam@3: exit(1); garbeam@3: } garbeam@3: garbeam@3: void * garbeam@3: emallocz(unsigned int size) garbeam@3: { garbeam@3: void *res = calloc(1, size); garbeam@3: if(!res) garbeam@3: bad_malloc(size); garbeam@3: return res; garbeam@3: } garbeam@3: garbeam@3: void * garbeam@3: emalloc(unsigned int size) garbeam@3: { garbeam@3: void *res = malloc(size); garbeam@3: if(!res) garbeam@3: bad_malloc(size); garbeam@3: return res; garbeam@3: } garbeam@3: garbeam@3: void * garbeam@3: erealloc(void *ptr, unsigned int size) garbeam@3: { garbeam@3: void *res = realloc(ptr, size); garbeam@3: if(!res) garbeam@3: bad_malloc(size); garbeam@3: return res; garbeam@3: } garbeam@3: garbeam@3: char * garbeam@3: estrdup(const char *str) garbeam@3: { garbeam@3: void *res = strdup(str); garbeam@3: if(!res) garbeam@3: bad_malloc(strlen(str)); garbeam@3: return res; garbeam@3: } garbeam@3: garbeam@3: void garbeam@3: failed_assert(char *a, char *file, int line) garbeam@3: { garbeam@3: fprintf(stderr, "Assertion \"%s\" failed at %s:%d\n", a, file, line); garbeam@3: abort(); garbeam@3: } garbeam@3: garbeam@3: void garbeam@3: swap(void **p1, void **p2) garbeam@3: { garbeam@3: void *tmp = *p1; garbeam@3: *p1 = *p2; garbeam@3: *p2 = tmp; garbeam@3: }