00001
00002
00003
00004
00005 static const char rcsid[] =
00006 "$Id: memory.c,v 1.3 2007/02/12 08:32:27 tho Exp $";
00007
00008 #include <stdlib.h>
00009 #include <toolbox/memory.h>
00010
00011 typedef struct u_memory_funcs_s
00012 {
00013 void *(*f_malloc) (size_t);
00014 void *(*f_calloc) (size_t, size_t);
00015 void *(*f_realloc) (void *, size_t);
00016 void (*f_free) (void *);
00017 } u_memory_fns_t;
00018
00019
00020 static u_memory_fns_t u_memory_fns = { malloc, calloc, realloc, free };
00021
00028 void u_memory_set_malloc (void *(*f_malloc) (size_t))
00029 {
00030 u_memory_fns.f_malloc = f_malloc;
00031 }
00032
00034 void u_memory_set_calloc (void *(*f_calloc) (size_t, size_t))
00035 {
00036 u_memory_fns.f_calloc = f_calloc;
00037 }
00038
00040 void u_memory_set_realloc (void *(*f_realloc) (void *, size_t))
00041 {
00042 u_memory_fns.f_realloc = f_realloc;
00043 }
00044
00046 void u_memory_set_free (void (*f_free) (void *))
00047 {
00048 u_memory_fns.f_free = f_free;
00049 }
00050
00052 void *u_malloc (size_t sz)
00053 {
00054 return u_memory_fns.f_malloc(sz);
00055 }
00056
00058 void *u_calloc (size_t cnt, size_t sz)
00059 {
00060 return u_memory_fns.f_calloc(cnt, sz);
00061 }
00062
00064 void *u_zalloc (size_t sz)
00065 {
00066 return u_memory_fns.f_calloc(1, sz);
00067 }
00068
00070 void *u_realloc (void *ptr, size_t sz)
00071 {
00072 return u_memory_fns.f_realloc(ptr, sz);
00073 }
00074
00076 void u_free (void *ptr)
00077 {
00078 if (ptr)
00079 u_memory_fns.f_free(ptr);
00080 }
00081