memory.c

00001 /*
00002  * Copyright (c) 2005-2012 by KoanLogic s.r.l. - All rights reserved.
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 /* defaults to LibC memory allocator */
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 

←Products
© 2005-2012 - KoanLogic S.r.l. - All rights reserved