struct loc_info { char *file; char *function; int line; }; struct alloc_info { struct loc_info alloc_loc_info; struct loc_info free_loc_info; int size; }; #ifdef _DEBUG #define KRYMEMTRACKING 1 #endif #ifdef NOKRYMEMTRACKING #undef KRYMEMTRACKING #endif #ifdef KRYMEMTRACKING void kry_malloc_enable_print(); void kry_malloc_disable_print(); void kry_malloc_enable_track(); void kry_malloc_disable_track(); void kry_malloc_print_unfreed(); void *kry_malloc_track_ptr_real(void *ptr, int length, char *file, char *function, int line); gboolean kry_malloc_untrack_ptr_real(void *ptr, char *file, char *function, int line); void *kry_malloc_real(int length, char *file, char *function, int line); void *kry_malloc0_real(int length, char *file, char *function, int line); void kry_free_real(void *ptr, char *file, char *function, int line); char *kry_strdup_real(const char *ptr, char *file, char *function, int line); char *kry_strdup_printf(char *file, char *function, int line, char *format, ...); char *kry_strdup_vprintf_real(char *file, char *function, int line, char *format, va_list list); #define KRY_LOC __FILE__, __FUNCTION__, __LINE__, #define KRY_TS(x) ((char *) kry_malloc_track_ptr(x, (x == NULL ? NULL : strlen(x)))) #define KRY_TP(x, s) (kry_malloc_track_ptr(x, s)) #define KRY_UTP(x) kry_malloc_untrack_ptr_real(x, __FILE__, __FUNCTION__, __LINE__) #define kry_malloc(x) kry_malloc_real(x, __FILE__, __FUNCTION__, __LINE__) #define kry_malloc0(x) kry_malloc0_real(x, __FILE__, __FUNCTION__, __LINE__) #define kry_free(x) kry_free_real(x, __FILE__, __FUNCTION__, __LINE__) void kry_free_minimal(void *ptr); #define kry_new(x, n) ((x*) kry_malloc(sizeof(x) * n)) #define kry_new0(x) ((x*) kry_malloc0(sizeof(x))) #define kry_new0_n(x, n) ((x*) kry_malloc0(sizeof(x) * n)) #define kry_malloc_track_ptr(x, y) kry_malloc_track_ptr_real(x, y, __FILE__, __FUNCTION__, __LINE__) #define kry_strdup(x) kry_strdup_real(x, __FILE__, __FUNCTION__, __LINE__) #define kry_strdup_vprintf(x, y) kry_strdup_vprintf_real(__FILE__, __FUNCTION__, __LINE__, x, y) #else #define kry_malloc_enable_print() {} #define kry_malloc_disable_print() {} #define kry_malloc_track_ptr {} #define kry_malloc_enable_track() {} #define kry_malloc_disable_track() {} #define kry_malloc_print_unfreed() {} #define KRY_TS(x) (x) #define KRY_TP(x, s) ((void)(x)) #define KRY_UTP(x) ((void)(x)) #define KRY_LOC #define kry_malloc g_malloc #define kry_free g_free #define kry_new0(x) g_new0(x, 1) #define kry_new0_n g_new0 #define kry_new g_new #define kry_free_minimal g_free #define kry_strdup_printf g_strdup_printf #define kry_strdup g_strdup #define kry_malloc0 g_malloc0 #define kry_strdup_vprintf g_strdup_vprintf #endif