diff --git a/src/lib-mem.c b/src/lib-mem.c index 86f7e40..8c78b59 100644 --- a/src/lib-mem.c +++ b/src/lib-mem.c @@ -102,6 +102,13 @@ static int dummy_offset = 0; #define DUMMY_START ((uintptr_t)dummy_buffer) #define DUMMY_STOP ((uintptr_t)dummy_buffer + DUMMY_BYTES) +void _zz_mem_init(void) +{ + LOADSYM(calloc); + LOADSYM(malloc); + LOADSYM(realloc); +} + void *NEW(calloc)(size_t nmemb, size_t size) { void *ret; @@ -144,7 +151,8 @@ void NEW(free)(void *ptr) void *NEW(realloc)(void *ptr, size_t size) { void *ret; - if((uintptr_t)ptr >= DUMMY_START && (uintptr_t)ptr < DUMMY_STOP) + if(!ORIG(realloc) + || ((uintptr_t)ptr >= DUMMY_START && (uintptr_t)ptr < DUMMY_STOP)) { ret = dummy_buffer + dummy_offset; memcpy(ret, ptr, size); diff --git a/src/libzzuf.c b/src/libzzuf.c index 37256de..d0bc3f7 100644 --- a/src/libzzuf.c +++ b/src/libzzuf.c @@ -111,6 +111,7 @@ void _zz_init(void) _zz_network = 1; _zz_fd_init(); + _zz_mem_init(); _zz_sys_init(); tmp = getenv("ZZUF_STDIN"); diff --git a/src/libzzuf.h b/src/libzzuf.h index 8dc6a80..ef0fd55 100644 --- a/src/libzzuf.h +++ b/src/libzzuf.h @@ -53,3 +53,6 @@ extern int _zz_memory; extern int _zz_network; extern int _zz_autoinc; +/* This function is needed to initialise memory functions */ +extern void _zz_mem_init(void); +