}
}
+CxBuffer *cxBufferCreate(
+ void *space,
+ size_t capacity,
+ CxAllocator const *allocator,
+ int flags
+) {
+ CxBuffer *buf = cxMalloc(allocator, sizeof(CxBuffer));
+ if (buf == NULL) return NULL;
+ if (0 == cxBufferInit(buf, space, capacity, allocator, flags)) {
+ return buf;
+ } else {
+ cxFree(allocator, buf);
+ return NULL;
+ }
+}
+
+void cxBufferFree(CxBuffer *buffer) {
+ if ((buffer->flags & CX_BUFFER_FREE_CONTENTS) == CX_BUFFER_FREE_CONTENTS) {
+ cxFree(buffer->allocator, buffer->bytes);
+ }
+ cxFree(buffer->allocator, buffer);
+}
+
int cxBufferSeek(
CxBuffer *buffer,
off_t offset,