src/buffer.c

changeset 501
9a08f5e515cc
parent 500
eb9e7bd40a8e
child 529
814d51173f20
     1.1 --- a/src/buffer.c	Sun Jan 30 14:19:00 2022 +0100
     1.2 +++ b/src/buffer.c	Mon Jan 31 17:15:59 2022 +0100
     1.3 @@ -32,39 +32,37 @@
     1.4  #include <stdlib.h>
     1.5  #include <string.h>
     1.6  
     1.7 -CxBuffer *cxBufferCreate(
     1.8 +int cxBufferInit(
     1.9 +        CxBuffer *buffer,
    1.10          void *space,
    1.11          size_t capacity,
    1.12 +        CxAllocator *allocator,
    1.13          int flags
    1.14  ) {
    1.15 -    CxBuffer *buffer = (CxBuffer *) malloc(sizeof(cx_buffer_s));
    1.16 -    if (buffer) {
    1.17 -        buffer->flags = flags;
    1.18 -        if (!space) {
    1.19 -            buffer->bytes = malloc(capacity);
    1.20 -            if (!buffer->bytes) {
    1.21 -                free(buffer);
    1.22 -                return NULL;
    1.23 -            }
    1.24 -            memset(buffer->bytes, 0, capacity);
    1.25 -            buffer->flags |= CX_BUFFER_FREE_CONTENTS;
    1.26 -        } else {
    1.27 -            buffer->bytes = space;
    1.28 +    buffer->allocator = allocator;
    1.29 +    buffer->flags = flags;
    1.30 +    if (!space) {
    1.31 +        buffer->bytes = cxMalloc(allocator, capacity);
    1.32 +        if (buffer->bytes == NULL) {
    1.33 +            return 1;
    1.34          }
    1.35 -        buffer->capacity = capacity;
    1.36 -        buffer->size = 0;
    1.37 +        memset(buffer->bytes, 0, capacity);
    1.38 +        buffer->flags |= CX_BUFFER_FREE_CONTENTS;
    1.39 +    } else {
    1.40 +        buffer->bytes = space;
    1.41 +    }
    1.42 +    buffer->capacity = capacity;
    1.43 +    buffer->size = 0;
    1.44  
    1.45 -        buffer->pos = 0;
    1.46 -    }
    1.47 +    buffer->pos = 0;
    1.48  
    1.49 -    return buffer;
    1.50 +    return 0;
    1.51  }
    1.52  
    1.53  void cxBufferDestroy(CxBuffer *buffer) {
    1.54      if ((buffer->flags & CX_BUFFER_FREE_CONTENTS) == CX_BUFFER_FREE_CONTENTS) {
    1.55 -        free(buffer->bytes);
    1.56 +        cxFree(buffer->allocator, buffer->bytes);
    1.57      }
    1.58 -    free(buffer);
    1.59  }
    1.60  
    1.61  CxBuffer *cxBufferExtract(

mercurial