From df9bc5b9d048c7ecb96838123e39d5bc7c23aa18 Mon Sep 17 00:00:00 2001 From: Tharre Date: Sun, 16 Nov 2014 19:19:59 +0100 Subject: Refactor error handling system by using die() Defined error messages have also been replaced with string literals. --- src/util.c | 45 +++++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 16 deletions(-) (limited to 'src/util.c') diff --git a/src/util.c b/src/util.c index 797c84d..ce668fc 100644 --- a/src/util.c +++ b/src/util.c @@ -6,44 +6,57 @@ * of the MIT license. See the LICENSE file for details. */ +#define _XOPEN_SOURCE 500 +#include +#include #include #include -#include +#include +#include +#include #include "util.h" #define _FILENAME "util.c" #include "dbg.h" -void *safe_malloc_(size_t size, const char *file, unsigned line) { +/* Print a given formated error message and die. */ +extern void __attribute__((noreturn)) die(const char *err, ...) { + assert(err); + va_list ap; + va_start(ap, err); + + vfprintf(stderr, err, ap); + + va_end(ap); + exit(EXIT_FAILURE); +} + +void *xmalloc(size_t size) { assert(size > 0); void *ptr = malloc(size); if (!ptr) - fatal_(file, line, ERRM_MALLOC, size); + diem("Cannot allocate %zu bytes", size); return ptr; } -void *safe_realloc_(void *ptr, size_t size, const char *file, unsigned line) { +void *xrealloc(void *ptr, size_t size) { assert(size > 0 && ptr); - void *ptr2 = realloc(ptr, size); - if (!ptr2) - fatal_(file, line, ERRM_REALLOC, size); + if (!(ptr = realloc(ptr, size))) + diem("Cannot reallocate %zu bytes", size); - return ptr2; + return ptr; } -char *safe_strdup_(const char *str, const char *file, unsigned line) { +char *xstrdup(const char *str) { assert(str); - size_t len = strlen(str) + 1; - char *ptr = malloc(len); - if (!ptr) - fatal_(file, line, ERRM_MALLOC, len); + if (!(str = strdup(str))) + diem("Insufficient memory for string allocation"); - return memcpy(ptr, str, len); + return (char*) str; } - /* For concating multiple strings into a single larger one. */ char *concat(size_t count, ...) { assert(count > 0); @@ -56,7 +69,7 @@ char *concat(size_t count, ...) { size += args_len[i]; } ++size; - char *result = safe_malloc(size); + char *result = xmalloc(size); /* debug("Allocated %zu bytes at %p\n", size, result); */ uintptr_t offset = 0; for (i = 0; i < count; ++i) { -- cgit v1.2.3-70-g09d2