From e53a5011237467c73c72b338570e4a455d2d1ef6 Mon Sep 17 00:00:00 2001 From: John Mark Bell Date: Sat, 8 Nov 2008 23:08:30 +0000 Subject: Return errors from constructors and destructors. svn path=/trunk/libparserutils/; revision=5652 --- src/utils/buffer.c | 50 +++++++++++++++++++++++++++++++------------------- 1 file changed, 31 insertions(+), 19 deletions(-) (limited to 'src/utils/buffer.c') 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; } /** -- cgit v1.2.3