#include <string.h> #include <stdlib.h> #include "internal.h" //#define DEBUG__MEMFILL 0xFF static void* system_alloc(HAllocator *allocator, size_t size) { void* ptr = malloc(size + sizeof(size_t)); #ifdef DEBUG__MEMFILL memset(ptr, DEBUG__MEMFILL, size + sizeof(size_t)); #endif *(size_t*)ptr = size; return ptr + sizeof(size_t); } static void* system_realloc(HAllocator *allocator, void* ptr, size_t size) { if (ptr == NULL) return system_alloc(allocator, size); ptr = realloc(ptr - sizeof(size_t), size + sizeof(size_t)); *(size_t*)ptr = size; #ifdef DEBUG__MEMFILL size_t old_size = *(size_t*)ptr; if (size > old_size) memset(ptr+sizeof(size_t)+old_size, DEBUG__MEMFILL, size - old_size); #endif return ptr + sizeof(size_t); } static void system_free(HAllocator *allocator, void* ptr) { if (ptr != NULL) free(ptr - sizeof(size_t)); } HAllocator system_allocator = { .alloc = system_alloc, .realloc = system_realloc, .free = system_free, };