| OLD | NEW |
| 1 #include <malloc.h> | 1 #include <malloc.h> |
| 2 | 2 |
| 3 void *(*const __realloc_dep)(void *, size_t) = realloc; | 3 void *(*const __realloc_dep)(void *, size_t) = realloc; |
| 4 | 4 |
| 5 struct chunk { | 5 struct chunk { |
| 6 size_t psize, csize; | 6 size_t psize, csize; |
| 7 struct chunk *next, *prev; | 7 struct chunk *next, *prev; |
| 8 }; | 8 }; |
| 9 | 9 |
| 10 #define OVERHEAD (2*sizeof(size_t)) | 10 #define OVERHEAD (2*sizeof(size_t)) |
| 11 #define CHUNK_SIZE(c) ((c)->csize & -2) | 11 #define CHUNK_SIZE(c) ((c)->csize & -2) |
| 12 #define MEM_TO_CHUNK(p) (struct chunk *)((char *)(p) - OVERHEAD) | 12 #define MEM_TO_CHUNK(p) (struct chunk *)((char *)(p) - OVERHEAD) |
| 13 | 13 |
| 14 size_t malloc_usable_size(void *p) | 14 size_t malloc_usable_size(void *p) |
| 15 { | 15 { |
| 16 » return CHUNK_SIZE(MEM_TO_CHUNK(p)) - OVERHEAD; | 16 » return p ? CHUNK_SIZE(MEM_TO_CHUNK(p)) - OVERHEAD : 0; |
| 17 } | 17 } |
| OLD | NEW |