diff options
author | Freya Murphy <freya@freyacat.org> | 2023-12-17 11:10:04 -0500 |
---|---|---|
committer | Freya Murphy <freya@freyacat.org> | 2023-12-17 11:10:04 -0500 |
commit | e0eacfa9773c83850ed5169d1e889ff845180581 (patch) | |
tree | 9f8bb433404ce7e4dda1b86ca4dd5d5a2fba10e9 /lib/lib.c | |
parent | snbt (diff) | |
download | nbtvis-e0eacfa9773c83850ed5169d1e889ff845180581.tar.gz nbtvis-e0eacfa9773c83850ed5169d1e889ff845180581.tar.bz2 nbtvis-e0eacfa9773c83850ed5169d1e889ff845180581.zip |
Diffstat (limited to 'lib/lib.c')
-rw-r--r-- | lib/lib.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/lib/lib.c b/lib/lib.c new file mode 100644 index 0000000..e6e691a --- /dev/null +++ b/lib/lib.c @@ -0,0 +1,51 @@ +#include "lib.h" + +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +__attribute__((__noreturn__)) +static void die() { + exit(1); +} + +void error_and_die(char *format, ...) { + va_list list; + va_start(list, format); + + vfprintf(stderr, format, list); + + die(); +} + +__attribute__((__noreturn__, format(printf, 1, 2))) +void perror_and_die(char *format, ...) { + va_list list; + va_start(list, format); + + vfprintf(stderr, format, list); + perror(": "); + + die(); +} + +void *xalloc(size_t amount) { + void *res = malloc(amount); + if (res == NULL) + error_and_die("failed to allocate memory"); + return res; +} + +void *xzalloc(size_t amount) { + void *res = xalloc(amount); + memset(res, 0, sizeof(amount)); + return res; +} + +void *xrealloc(void *ptr, size_t amount) { + void *res = realloc(ptr, amount); + if (res == NULL) + error_and_die("failed to allocate memory"); + return res; +} |