aboutsummaryrefslogtreecommitdiffstats
path: root/src/util.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/util.c')
-rw-r--r--src/util.c25
1 files changed, 22 insertions, 3 deletions
diff --git a/src/util.c b/src/util.c
index 80734c5..a0e05f5 100644
--- a/src/util.c
+++ b/src/util.c
@@ -11,14 +11,32 @@
#include "../config.h"
/* A safe malloc wrapper. */
-void *ec_malloc(size_t size) {
+void *safe_malloc_(size_t size, const char *file, unsigned int line) {
void *ptr = malloc(size);
+
if (!ptr)
- fatal("redo: cannot allocate %zu bytes", size);
+ fatal_(file, line, "redo: cannot allocate %zu bytes", size);
return ptr;
}
+void *safe_realloc_(void *ptr, size_t size, const char *file, unsigned int line) {
+ void *ptr2 = realloc(ptr, size);
+ if (!ptr2)
+ fatal_(file, line, "redo: cannot reallocate %zu bytes", size);
+
+ return ptr2;
+}
+
+FILE *safe_fopen_(const char *path, const char *mode, const char *file,
+ unsigned int line) {
+ FILE *temp = fopen(path, mode);
+ if (!temp)
+ fatal_(file, line, "redo: failed to open %s", path);
+
+ return temp;
+}
+
/* For concating multiple strings into a single larger one. */
char *concat(size_t count, ...) {
assert(count > 0);
@@ -31,7 +49,7 @@ char *concat(size_t count, ...) {
size += args_len[i];
}
size++;
- char *result = ec_malloc(size);
+ char *result = safe_malloc(size);
/* debug("Allocated %zu bytes at %p\n", size, result); */
uintptr_t offset = 0;
for (i = 0; i < count; ++i) {
@@ -49,6 +67,7 @@ char *xbasename(const char *path) {
return ptr? ptr+1 : (char*) path;
}
+/* TODO: REIMPLEMENT */
char *ec_strdup(const char* str) {
assert(str);
size_t len = strlen(str) + 1;