diff -r eb9e7bd40a8e -r 9a08f5e515cc src/buffer.c --- a/src/buffer.c Sun Jan 30 14:19:00 2022 +0100 +++ b/src/buffer.c Mon Jan 31 17:15:59 2022 +0100 @@ -32,39 +32,37 @@ #include #include -CxBuffer *cxBufferCreate( +int cxBufferInit( + CxBuffer *buffer, void *space, size_t capacity, + CxAllocator *allocator, int flags ) { - CxBuffer *buffer = (CxBuffer *) malloc(sizeof(cx_buffer_s)); - if (buffer) { - buffer->flags = flags; - if (!space) { - buffer->bytes = malloc(capacity); - if (!buffer->bytes) { - free(buffer); - return NULL; - } - memset(buffer->bytes, 0, capacity); - buffer->flags |= CX_BUFFER_FREE_CONTENTS; - } else { - buffer->bytes = space; + buffer->allocator = allocator; + buffer->flags = flags; + if (!space) { + buffer->bytes = cxMalloc(allocator, capacity); + if (buffer->bytes == NULL) { + return 1; } - buffer->capacity = capacity; - buffer->size = 0; + memset(buffer->bytes, 0, capacity); + buffer->flags |= CX_BUFFER_FREE_CONTENTS; + } else { + buffer->bytes = space; + } + buffer->capacity = capacity; + buffer->size = 0; - buffer->pos = 0; - } + buffer->pos = 0; - return buffer; + return 0; } void cxBufferDestroy(CxBuffer *buffer) { if ((buffer->flags & CX_BUFFER_FREE_CONTENTS) == CX_BUFFER_FREE_CONTENTS) { - free(buffer->bytes); + cxFree(buffer->allocator, buffer->bytes); } - free(buffer); } CxBuffer *cxBufferExtract(