From b6b7a01987dca604a161c8c73a240ec4430baed0 Mon Sep 17 00:00:00 2001 From: Mosder Date: Fri, 21 Aug 2026 11:50:51 +0200 Subject: refactor: renamed mem/alloc.h to safe.h and made it be a collection of "safe" wrappers for "unsafe" functions --- src/ds/array.c | 2 +- src/mem/alloc.c | 45 --------------------------------------------- src/safe.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 46 deletions(-) delete mode 100644 src/mem/alloc.c create mode 100644 src/safe.c (limited to 'src') diff --git a/src/ds/array.c b/src/ds/array.c index cdaf152..2b28a21 100644 --- a/src/ds/array.c +++ b/src/ds/array.c @@ -5,7 +5,7 @@ #include #include -#include "moslib/mem/alloc.h" +#include "moslib/safe.h" MosArrHeader *arr2hdr(void *arr) { return (MosArrHeader *)arr - 1; diff --git a/src/mem/alloc.c b/src/mem/alloc.c deleted file mode 100644 index 60da131..0000000 --- a/src/mem/alloc.c +++ /dev/null @@ -1,45 +0,0 @@ -#define MOS_FORCE_PREFIXES -#include "moslib/mem/alloc.h" - -#include -#include -#include - -#define ERR_MESS(fl, ln, fn, msg) "%s:%d - error in function %s:\n%s\n", fl, ln, fn, msg - -void *mos_safe_malloc_fn(size_t size, size_t att, const char *file, int line, const char *func) { - for (size_t i = 0; i < att; i++) { - void *p = malloc(size); - if (p) - return p; - if (i < att - 1) { - fprintf(stderr, ERR_MESS(file, line, func, "malloc failed - retrying in 1s...")); - sleep(1); - } - } - - char errmes[64]; - sprintf(errmes, "FATAL: malloc failed %zu times - exiting...", att); - fprintf(stderr, ERR_MESS(file, line, func, errmes)); - exit(EXIT_FAILURE); -} - -void *mos_safe_realloc_fn(void *ptr, size_t size, size_t att, const char *file, int line, const char *func) { - if (!ptr) - return mos_safe_malloc_fn(size, att, file, line, func); - - for (size_t i = 0; i < att; i++) { - void *p = realloc(ptr, size); - if (p) - return p; - if (i < att - 1) { - fprintf(stderr, ERR_MESS(file, line, func, "realloc failed - retrying in 1s...")); - sleep(1); - } - } - - char errmes[64]; - sprintf(errmes, "FATAL: realloc failed %zu times - exiting...", att); - fprintf(stderr, ERR_MESS(file, line, func, errmes)); - exit(EXIT_FAILURE); -} diff --git a/src/safe.c b/src/safe.c new file mode 100644 index 0000000..7c7627e --- /dev/null +++ b/src/safe.c @@ -0,0 +1,42 @@ +#define MOS_FORCE_PREFIXES +#include "moslib/safe.h" + +#include +#include +#include +#include + +#define ERR_MESS(msg, ...) err_mess(info, msg, __VA_ARGS__) + +void err_mess(MosSafeErrInfo info, const char *msg, ...) { + va_list args; + va_start(args, msg); + fprintf(stderr, "%s:%d - fatal error in function %s:\n", info.file, info.line, info.func); + vfprintf(stderr, msg, args); + fprintf(stderr, "\n"); + va_end(args); +} + +void *mos_safe_malloc_fn(size_t size, MosSafeErrInfo info) { + void *p = malloc(size); + if (p) + return p; + ERR_MESS("failed to malloc %zu bytes", size); + exit(EXIT_FAILURE); +} + +void *mos_safe_calloc_fn(size_t count, size_t size, MosSafeErrInfo info) { + void *p = calloc(count, size); + if (p) + return p; + ERR_MESS("failed to calloc %zu items of %zu size", count, size); + exit(EXIT_FAILURE); +} + +void *mos_safe_realloc_fn(void *ptr, size_t size, MosSafeErrInfo info) { + void *p = realloc(ptr, size); + if (p) + return p; + ERR_MESS("failed to realloc %p to %zu bytes", ptr, size); + exit(EXIT_FAILURE); +} -- cgit v1.2.3