summaryrefslogtreecommitdiff
path: root/src/utils/buffer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils/buffer.c')
-rw-r--r--src/utils/buffer.c50
1 files changed, 31 insertions, 19 deletions
diff --git a/src/utils/buffer.c b/src/utils/buffer.c
index 3c28e16..a7ee7f4 100644
--- a/src/utils/buffer.c
+++ b/src/utils/buffer.c
@@ -14,45 +14,57 @@
/**
* Create a memory buffer
*
- * \param alloc Memory (de)allocation function
- * \param pw Pointer to client-specific private data
- * \return Pointer to memory buffer, or NULL on memory exhaustion
+ * \param alloc Memory (de)allocation function
+ * \param pw Pointer to client-specific private data
+ * \param buffer Pointer to location to receive memory buffer
+ * \return PARSERUTILS_OK on success,
+ * PARSERUTILS_BADPARM on bad parameters,
+ * PARSERUTILS_NOMEM on memory exhausion
*/
-parserutils_buffer *parserutils_buffer_create(parserutils_alloc alloc, void *pw)
+parserutils_error parserutils_buffer_create(parserutils_alloc alloc, void *pw,
+ parserutils_buffer **buffer)
{
- parserutils_buffer *buffer =
- alloc(NULL, sizeof(parserutils_buffer), pw);
+ parserutils_buffer *b;
- if (buffer == NULL)
- return NULL;
+ if (alloc == NULL || buffer == NULL)
+ return PARSERUTILS_BADPARM;
+
+ b = alloc(NULL, sizeof(parserutils_buffer), pw);
+ if (b == NULL)
+ return PARSERUTILS_NOMEM;
- buffer->data = alloc(NULL, DEFAULT_SIZE, pw);
- if (buffer->data == NULL) {
- alloc(buffer, 0, pw);
- return NULL;
+ b->data = alloc(NULL, DEFAULT_SIZE, pw);
+ if (b->data == NULL) {
+ alloc(b, 0, pw);
+ return PARSERUTILS_NOMEM;
}
- buffer->length = 0;
- buffer->allocated = DEFAULT_SIZE;
+ b->length = 0;
+ b->allocated = DEFAULT_SIZE;
+
+ b->alloc = alloc;
+ b->pw = pw;
- buffer->alloc = alloc;
- buffer->pw = pw;
+ *buffer = b;
- return buffer;
+ return PARSERUTILS_OK;
}
/**
* Destroy a memory buffer
*
* \param buffer The buffer to destroy
+ * \return PARSERUTILS_OK on success, appropriate error otherwise
*/
-void parserutils_buffer_destroy(parserutils_buffer *buffer)
+parserutils_error parserutils_buffer_destroy(parserutils_buffer *buffer)
{
if (buffer == NULL)
- return;
+ return PARSERUTILS_BADPARM;
buffer->alloc(buffer->data, 0, buffer->pw);
buffer->alloc(buffer, 0, buffer->pw);
+
+ return PARSERUTILS_OK;
}
/**