| #include <malloc.h> | |
| void *(*const __realloc_dep)(void *, size_t) = realloc; | |
| struct chunk { | |
| size_t psize, csize; | |
| struct chunk *next, *prev; | |
| }; | |
| #define OVERHEAD (2*sizeof(size_t)) | |
| #define CHUNK_SIZE(c) ((c)->csize & -2) | |
| #define MEM_TO_CHUNK(p) (struct chunk *)((char *)(p) - OVERHEAD) | |
| size_t malloc_usable_size(void *p) | |
| { | |
| return p ? CHUNK_SIZE(MEM_TO_CHUNK(p)) - OVERHEAD : 0; | |
| } |