aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ds/array.c2
-rw-r--r--src/mem/alloc.c45
-rw-r--r--src/safe.c42
3 files changed, 43 insertions, 46 deletions
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 <stdlib.h>
#include <string.h>
-#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 <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#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 <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#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);
+}