#include "memory.h" #include "console_colors.h" #include #include //default allocator void* defaultAllocator(void* pointer, size_t oldSize, size_t newSize) { if (newSize == 0 && oldSize == 0) { //causes issues, so just skip out with a NO-OP return NULL; } if (newSize == 0) { free(pointer); return NULL; } void* mem = realloc(pointer, newSize); if (mem == NULL) { fprintf(stderr, ERROR "[internal] Memory allocation error (requested %d for %ld, replacing %d)\n" RESET, (int)newSize, (long int)pointer, (int)oldSize); exit(-1); } return mem; } //exposed API static AllocatorFn allocator = defaultAllocator; void setAllocator(AllocatorFn fn) { if (fn == NULL) { fprintf(stderr, ERROR "[internal] Memory allocator error (can't be null)\n" RESET); exit(-1); } if (fn == reallocate) { fprintf(stderr, ERROR "[internal] Memory allocator error (can't loop the reallocate function)\n" RESET); exit(-1); } allocator = fn; } void* reallocate(void* pointer, size_t oldSize, size_t newSize) { return allocator(pointer, oldSize, newSize); }