summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Kaivo <jkk@ung.org>2020-06-30 16:09:23 -0400
committerJakob Kaivo <jkk@ung.org>2020-06-30 16:09:23 -0400
commit388f3dfd269368b26990f86d12ea6ab1c4b7c4e6 (patch)
treedc662d2cc8bd2da650bf3554764ab8534c2d1442
parent30779981519a03506e515851a760a1f1f5a98a23 (diff)
add optional macros to directly provide the <stdlib.h> interface
-rw-r--r--Makefile4
-rw-r--r--include/mapalloc.h7
-rw-r--r--test/macros.c25
3 files changed, 35 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index b31f413..fb4d4b0 100644
--- a/Makefile
+++ b/Makefile
@@ -15,7 +15,8 @@ TESTS=$(BINDIR)/overflow \
$(BINDIR)/zero \
$(BINDIR)/realloc \
$(BINDIR)/use-after-free \
- $(BINDIR)/double-free
+ $(BINDIR)/double-free \
+ $(BINDIR)/macros
all: $(LIBDIR)/libmapalloc.a $(LIBDIR)/libwrapalloc.so
@@ -50,6 +51,7 @@ $(BINDIR)/zero: $(TESTDIR)/zero.c
$(BINDIR)/realloc: $(TESTDIR)/realloc.c
$(BINDIR)/use-after-free: $(TESTDIR)/use-after-free.c
$(BINDIR)/double-free: $(TESTDIR)/double-free.c
+$(BINDIR)/macros: $(TESTDIR)/macros.c
$(BINDIR)/wrapper: $(TESTDIR)/wrapper.c
@mkdir -p $(@D)
diff --git a/include/mapalloc.h b/include/mapalloc.h
index 65581c8..1c43f2b 100644
--- a/include/mapalloc.h
+++ b/include/mapalloc.h
@@ -9,9 +9,16 @@ void *MA_realloc(void *ptr, size_t n);
void MA_free(void *ptr);
#ifdef MA_OVERRIDE_STDLIB
+#undef malloc
#define malloc(n) MA_malloc(n)
+
+#undef calloc
#define calloc(n, e) MA_calloc(n, e)
+
+#undef realloc
#define realloc(p, n) MA_realloc(p, n)
+
+#undef free
#define free(p) MA_free(p)
#endif
diff --git a/test/macros.c b/test/macros.c
new file mode 100644
index 0000000..3c7a35a
--- /dev/null
+++ b/test/macros.c
@@ -0,0 +1,25 @@
+#define _POSIX_C_SOURCE 200809L
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+#define MA_OVERRIDE_STDLIB
+#include "mapalloc.h"
+
+int main(void)
+{
+ const char buf[] = "THIS IS A CONSTANT STRING";
+
+ char *ptr = realloc(NULL, sizeof(buf));
+ memcpy(ptr, buf, sizeof(buf));
+ printf("%p: %s\n", ptr, ptr);
+
+ ptr = realloc(ptr, sizeof(buf) * 2);
+ memcpy(ptr + sizeof(buf) - 1, buf, sizeof(buf));
+ printf("%p: %s\n", ptr, ptr);
+
+ ptr = realloc(ptr, sizeof(buf) * sysconf(_SC_PAGESIZE));
+ memcpy(ptr + (2 * sizeof(buf)) - 2, buf, sizeof(buf));
+ printf("%p: %s\n", ptr, ptr);
+}