/* * For a verbose, checking malloc * The functions should be called via the macros, E_MALLOC and E_REALLOC. * For fun, we add in the function attributes which tell gcc that there * will be no aliasing of returned pointers. These may or may not help. * They are written so they will do no harm with other compilers. * rcsid = $Id: e_malloc.h,v 1.1 2007/09/28 16:57:11 mmundry Exp $ */ #ifndef __E_MALLOC_H #define __E_MALLOC_H #ifndef E_MALLOC # define E_MALLOC(x) e_malloc ((x), __FILE__, __LINE__) #endif #ifndef E_REALLOC # define E_REALLOC(p,s) e_realloc ((p), (s), __FILE__, __LINE__) #endif #ifndef E_CALLOC # define E_CALLOC(n,s) e_calloc ((n), (s), __FILE__, __LINE__) #endif /* For the gnu compiler, the attribute tells it a bit about * pointer aliasing (or lack thereof). */ void *e_malloc(size_t x, const char *f, const int l) #if (__GNUC__) && (__GNUC__ > 2) __attribute__ ((malloc)) #endif /* __GNUC__ */ ; void *e_realloc(void *p, size_t x, const char *f, const int l) #if (__GNUC__) && (__GNUC__ > 2) __attribute__ ((malloc)) #endif /* __GNUC__ */ ; void *e_calloc(size_t n, size_t s, const char *f, const int l) #if (__GNUC__) && (__GNUC__ > 2) __attribute__ ((malloc)) #endif /* __GNUC__ */ ; void free_if_not_null ( void *); #endif /* __E_MALLOC_H */