diff options
Diffstat (limited to 'src/mem.c')
-rw-r--r-- | src/mem.c | 32 |
1 files changed, 19 insertions, 13 deletions
@@ -22,10 +22,6 @@ #include <string.h> #include <errno.h> -void *(*grecs_malloc_fun)(size_t size); -void *(*grecs_realloc_fun)(void *ptr, size_t size); -void (*grecs_alloc_die_fun) (void); - static void * def_malloc_fun(size_t size) { @@ -38,13 +34,27 @@ def_realloc_fun(void *ptr, size_t size) return realloc(ptr, size); } +static void +def_free_fun(void *ptr) +{ + free(ptr); +} + +void *(*grecs_malloc_fun)(size_t size) = def_malloc_fun; +void *(*grecs_realloc_fun)(void *ptr, size_t size) = def_realloc_fun; +void (*grecs_alloc_die_fun)(void); +void (*grecs_free_fun)(void *) = def_free_fun; + +void +grecs_free(void *ptr) +{ + grecs_free_fun(ptr); +} + void * grecs_malloc(size_t size) { - void *ptr; - if (!grecs_malloc_fun) - grecs_malloc_fun = def_malloc_fun; - ptr = grecs_malloc_fun(size); + void *ptr = grecs_malloc_fun(size); if (!ptr) grecs_alloc_die(); return ptr; @@ -67,11 +77,7 @@ grecs_calloc(size_t nmemb, size_t size) void * grecs_realloc(void *ptr, size_t size) { - void *newptr; - - if (!grecs_realloc_fun) - grecs_realloc_fun = def_realloc_fun; - newptr = grecs_realloc_fun(ptr, size); + void *newptr = grecs_realloc_fun(ptr, size); if (!newptr) grecs_alloc_die(); return newptr; |