#include "allocator.h" #include /* malloc */ /* Interface Code */ static void * default_allocate(struct allocator *allocator, size_t n) { (void) allocator; return malloc(n); } static void default_deallocate(struct allocator *allocator, void *ptr) { (void) allocator; free(ptr); } struct allocator allocator_default_allocator = { .allocate = &default_allocate, .deallocate = &default_deallocate }; /* Libary Code */ #include void * allocator_malloc(struct allocator *allocator, size_t n) { if ( !allocator ) { allocator = &allocator_default_allocator; } return allocator->allocate(allocator, n); } void allocator_free(struct allocator *allocator, void *ptr) { if ( !allocator ) { allocator = &allocator_default_allocator; } allocator->deallocate(allocator, ptr); } char * allocator_strdup(struct allocator *allocator, const char *str) { size_t n; char * dest; n = strlen(str) + 1; dest = allocator_malloc(allocator, n); if ( dest ) { memcpy(dest, str, n); } return dest; } void * allocator_malloc_zero(struct allocator *allocator, size_t n) { void *ptr; ptr = allocator_malloc(allocator, n); if ( ptr ) { memset(ptr, 0, n); } return ptr; } int main() { }