00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00036 #ifndef _walloc_h_
00037 #define _walloc_h_
00038
00039 #include <glib.h>
00040
00041
00042
00043
00044
00045
00046 #if defined(USE_DMALLOC) && !defined(REMAP_ZALLOC)
00047 #define REMAP_ZALLOC
00048 #endif
00049
00050 #ifdef REMAP_ZALLOC
00051
00052 #ifdef TRACK_ZALLOC
00053 #error "TRACK_ZALLOC and REMAP_ZALLOC are mutually exclusive"
00054 #endif
00055
00056 #define walloc(s) g_malloc(s)
00057 #define walloc0(s) g_malloc0(s)
00058 #define wcopy(p,s) g_memdup((p), (s))
00059 #define wfree(p,s) g_free(p)
00060 #define wrealloc(p,o,n) g_realloc((p), (n));
00061
00062 #else
00063
00064 gpointer walloc(size_t size);
00065 gpointer walloc0(size_t size);
00066 void wfree(gpointer ptr, size_t size);
00067 gpointer wrealloc(gpointer old, size_t old_size, size_t new_size);
00068
00069 static inline WARN_UNUSED_RESULT gpointer
00070 wcopy(gconstpointer ptr, size_t size)
00071 {
00072 gpointer cp = walloc(size);
00073 memcpy(cp, ptr, size);
00074 return cp;
00075 }
00076
00077 #endif
00078
00079 #ifdef TRACK_ZALLOC
00080
00081 #define walloc(s) walloc_track(s, __FILE__, __LINE__)
00082 #define wcopy(p,s) wcopy_track(p, s, __FILE__, __LINE__)
00083 #define walloc0(s) walloc0_track(s, __FILE__, __LINE__)
00084 #define wrealloc(p,o,n) wrealloc_track(p, o, n, __FILE__, __LINE__)
00085
00086 gpointer walloc_track(size_t size, gchar *file, gint line);
00087 gpointer walloc0_track(size_t size, gchar *file, gint line);
00088 gpointer wcopy_track(gconstpointer, size_t size, gchar *file, gint line);
00089 gpointer wrealloc_track(gpointer old, size_t old_size, size_t new_size,
00090 gchar *file, gint line);
00091
00092 #endif
00093
00094 void wdestroy(void);
00095
00096 #define WFREE_NULL(p,size) \
00097 G_STMT_START { \
00098 if (p) { \
00099 wfree(p,size); \
00100 p = NULL; \
00101 } \
00102 } G_STMT_END
00103
00104 #endif
00105