src/buffer.c

changeset 501
9a08f5e515cc
parent 500
eb9e7bd40a8e
child 529
814d51173f20
equal deleted inserted replaced
500:eb9e7bd40a8e 501:9a08f5e515cc
30 #include "cx/utils.h" 30 #include "cx/utils.h"
31 31
32 #include <stdlib.h> 32 #include <stdlib.h>
33 #include <string.h> 33 #include <string.h>
34 34
35 CxBuffer *cxBufferCreate( 35 int cxBufferInit(
36 CxBuffer *buffer,
36 void *space, 37 void *space,
37 size_t capacity, 38 size_t capacity,
39 CxAllocator *allocator,
38 int flags 40 int flags
39 ) { 41 ) {
40 CxBuffer *buffer = (CxBuffer *) malloc(sizeof(cx_buffer_s)); 42 buffer->allocator = allocator;
41 if (buffer) { 43 buffer->flags = flags;
42 buffer->flags = flags; 44 if (!space) {
43 if (!space) { 45 buffer->bytes = cxMalloc(allocator, capacity);
44 buffer->bytes = malloc(capacity); 46 if (buffer->bytes == NULL) {
45 if (!buffer->bytes) { 47 return 1;
46 free(buffer); 48 }
47 return NULL; 49 memset(buffer->bytes, 0, capacity);
48 } 50 buffer->flags |= CX_BUFFER_FREE_CONTENTS;
49 memset(buffer->bytes, 0, capacity); 51 } else {
50 buffer->flags |= CX_BUFFER_FREE_CONTENTS; 52 buffer->bytes = space;
51 } else { 53 }
52 buffer->bytes = space; 54 buffer->capacity = capacity;
53 } 55 buffer->size = 0;
54 buffer->capacity = capacity; 56
55 buffer->size = 0; 57 buffer->pos = 0;
56 58
57 buffer->pos = 0; 59 return 0;
58 }
59
60 return buffer;
61 } 60 }
62 61
63 void cxBufferDestroy(CxBuffer *buffer) { 62 void cxBufferDestroy(CxBuffer *buffer) {
64 if ((buffer->flags & CX_BUFFER_FREE_CONTENTS) == CX_BUFFER_FREE_CONTENTS) { 63 if ((buffer->flags & CX_BUFFER_FREE_CONTENTS) == CX_BUFFER_FREE_CONTENTS) {
65 free(buffer->bytes); 64 cxFree(buffer->allocator, buffer->bytes);
66 } 65 }
67 free(buffer);
68 } 66 }
69 67
70 CxBuffer *cxBufferExtract( 68 CxBuffer *cxBufferExtract(
71 CxBuffer *src, 69 CxBuffer *src,
72 size_t start, 70 size_t start,

mercurial