2007-04-06 21:16:38 +00:00
|
|
|
#ifndef __MEM_H
|
|
|
|
#define __MEM_H
|
|
|
|
|
|
|
|
#ifdef __HAVE_LEAK_DETECTION
|
|
|
|
|
|
|
|
#define NAMEOF(v) #v
|
|
|
|
#define xmalloc(x) MM_malloc(x, __FILE__, __LINE__)
|
|
|
|
#define xfree(x) MM_free(x, __FILE__, __LINE__, NAMEOF(x))
|
|
|
|
#define xstrdup(x) MM_strdup(x, __FILE__, __LINE__)
|
|
|
|
#define xrealloc(x, y) MM_realloc(x, y, __FILE__, __LINE__)
|
|
|
|
|
|
|
|
TAILQ_HEAD(MM_chunks, MM_mem_chunk);
|
|
|
|
|
|
|
|
struct MM_mem_chunk {
|
|
|
|
void *address;
|
|
|
|
const char *filename;
|
2007-08-22 23:26:02 +00:00
|
|
|
uint32_t line;
|
2007-04-06 21:16:38 +00:00
|
|
|
size_t size;
|
|
|
|
|
|
|
|
TAILQ_ENTRY(MM_mem_chunk) next;
|
|
|
|
};
|
|
|
|
|
|
|
|
void *MM_malloc(size_t, char *, int);
|
|
|
|
void *MM_realloc(void *, size_t, char *, int);
|
|
|
|
void MM_free(void *, char *, int, char *);
|
|
|
|
char *MM_strdup(const char *, char *, int);
|
|
|
|
void MM_leakd_init(void);
|
|
|
|
void MM_leakd_printallocated(void);
|
|
|
|
void MM_leakd_flush(void);
|
|
|
|
|
|
|
|
#endif /* __HAVE_LEAK_DETECTION */
|
|
|
|
#endif /* ! HAVE_MEM_H */
|