diff options
author | Jakob Kaivo <jkk@ung.org> | 2020-06-30 16:09:23 -0400 |
---|---|---|
committer | Jakob Kaivo <jkk@ung.org> | 2020-06-30 16:09:23 -0400 |
commit | 388f3dfd269368b26990f86d12ea6ab1c4b7c4e6 (patch) | |
tree | dc662d2cc8bd2da650bf3554764ab8534c2d1442 | |
parent | 30779981519a03506e515851a760a1f1f5a98a23 (diff) |
add optional macros to directly provide the <stdlib.h> interface
-rw-r--r-- | Makefile | 4 | ||||
-rw-r--r-- | include/mapalloc.h | 7 | ||||
-rw-r--r-- | test/macros.c | 25 |
3 files changed, 35 insertions, 1 deletions
@@ -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); +} |