aboutsummaryrefslogtreecommitdiff
path: root/src/mem.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mem.c')
-rw-r--r--src/mem.c32
1 files changed, 19 insertions, 13 deletions
diff --git a/src/mem.c b/src/mem.c
index b18cc72..2e6a7cf 100644
--- a/src/mem.c
+++ b/src/mem.c
@@ -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;

Return to:

Send suggestions and report system problems to the System administrator.