memory.c
00001
00002
00003
00004
00005 #include <stdlib.h>
00006 #include <toolbox/memory.h>
00007
00008 typedef struct u_memory_funcs_s
00009 {
00010 void *(*f_malloc) (size_t);
00011 void *(*f_calloc) (size_t, size_t);
00012 void *(*f_realloc) (void *, size_t);
00013 void (*f_free) (void *);
00014 } u_memory_fns_t;
00015
00016
00017 static u_memory_fns_t u_memory_fns = { malloc, calloc, realloc, free };
00018
00037 void u_memory_set_malloc (void *(*f_malloc) (size_t))
00038 {
00039 u_memory_fns.f_malloc = f_malloc;
00040 }
00041
00043 void u_memory_set_calloc (void *(*f_calloc) (size_t, size_t))
00044 {
00045 u_memory_fns.f_calloc = f_calloc;
00046 }
00047
00049 void u_memory_set_realloc (void *(*f_realloc) (void *, size_t))
00050 {
00051 u_memory_fns.f_realloc = f_realloc;
00052 }
00053
00055 void u_memory_set_free (void (*f_free) (void *))
00056 {
00057 u_memory_fns.f_free = f_free;
00058 }
00059
00061 void *u_malloc (size_t sz)
00062 {
00063 return u_memory_fns.f_malloc(sz);
00064 }
00065
00067 void *u_calloc (size_t cnt, size_t sz)
00068 {
00069 return u_memory_fns.f_calloc(cnt, sz);
00070 }
00071
00073 void *u_zalloc (size_t sz)
00074 {
00075 return u_memory_fns.f_calloc(1, sz);
00076 }
00077
00079 void *u_realloc (void *ptr, size_t sz)
00080 {
00081 return u_memory_fns.f_realloc(ptr, sz);
00082 }
00083
00085 void u_free (void *ptr)
00086 {
00087 if (ptr)
00088 u_memory_fns.f_free(ptr);
00089 }
00090