summaryrefslogtreecommitdiff
path: root/malloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'malloc.c')
-rw-r--r--malloc.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/malloc.c b/malloc.c
new file mode 100644
index 0000000..cf0f2e0
--- /dev/null
+++ b/malloc.c
@@ -0,0 +1,39 @@
+/*
+ * malloc.c: safe wrappers around malloc, realloc, free, strdup
+ */
+
+#include <stdlib.h>
+#include "buttress.h"
+
+/*
+ * smalloc should guarantee to return a useful pointer - buttress
+ * can do nothing except die when it's out of memory anyway
+ */
+void *smalloc(int size) {
+ void *p = malloc(size);
+ if (!p)
+ fatal(err_nomemory);
+ return p;
+}
+
+/*
+ * sfree should guaranteeably deal gracefully with freeing NULL
+ */
+void sfree(void *p) {
+ if (p)
+ free(p);
+}
+
+/*
+ * srealloc should guaranteeably be able to realloc NULL
+ */
+void *srealloc(void *p, int size) {
+ void *q;
+ if (p)
+ q = realloc(p, size);
+ else
+ q = malloc(size);
+ if (!q)
+ fatal(err_nomemory);
+ return p;
+}