1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
#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;
uint32_t line;
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 */
|