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/charset/codecs/codec_ext8.c | 53 +++++++++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 21 deletions(-) (limited to 'src/charset/codecs/codec_ext8.c') diff --git a/src/charset/codecs/codec_ext8.c b/src/charset/codecs/codec_ext8.c index 8678890..1f12fea 100644 --- a/src/charset/codecs/codec_ext8.c +++ b/src/charset/codecs/codec_ext8.c @@ -60,9 +60,11 @@ typedef struct charset_ext8_codec { } charset_ext8_codec; static bool charset_ext8_codec_handles_charset(const char *charset); -static parserutils_charset_codec *charset_ext8_codec_create(const char *charset, - parserutils_alloc alloc, void *pw); -static void charset_ext8_codec_destroy (parserutils_charset_codec *codec); +static parserutils_error charset_ext8_codec_create(const char *charset, + parserutils_alloc alloc, void *pw, + parserutils_charset_codec **codec); +static parserutils_error charset_ext8_codec_destroy( + parserutils_charset_codec *codec); static parserutils_error charset_ext8_codec_encode( parserutils_charset_codec *codec, const uint8_t **source, size_t *sourcelen, @@ -119,12 +121,16 @@ bool charset_ext8_codec_handles_charset(const char *charset) * \param charset The charset to read from / write to * \param alloc Memory (de)allocation function * \param pw Pointer to client-specific private data (may be NULL) - * \return Pointer to codec, or NULL on failure + * \param codec Pointer to location to receive codec + * \return PARSERUTILS_OK on success, + * PARSERUTILS_BADPARM on bad parameters, + * PARSERUTILS_NOMEM on memory exhausion */ -parserutils_charset_codec *charset_ext8_codec_create(const char *charset, - parserutils_alloc alloc, void *pw) +parserutils_error charset_ext8_codec_create(const char *charset, + parserutils_alloc alloc, void *pw, + parserutils_charset_codec **codec) { - charset_ext8_codec *codec; + charset_ext8_codec *c; uint16_t match = parserutils_charset_mibenum_from_name( charset, strlen(charset)); uint32_t *table = NULL; @@ -138,35 +144,40 @@ parserutils_charset_codec *charset_ext8_codec_create(const char *charset, assert(table != NULL); - codec = alloc(NULL, sizeof(charset_ext8_codec), pw); - if (codec == NULL) - return NULL; + c = alloc(NULL, sizeof(charset_ext8_codec), pw); + if (c == NULL) + return PARSERUTILS_NOMEM; - codec->table = table; + c->table = table; - codec->read_buf[0] = 0; - codec->read_len = 0; + c->read_buf[0] = 0; + c->read_len = 0; - codec->write_buf[0] = 0; - codec->write_len = 0; + c->write_buf[0] = 0; + c->write_len = 0; /* Finally, populate vtable */ - codec->base.handler.destroy = charset_ext8_codec_destroy; - codec->base.handler.encode = charset_ext8_codec_encode; - codec->base.handler.decode = charset_ext8_codec_decode; - codec->base.handler.reset = charset_ext8_codec_reset; + c->base.handler.destroy = charset_ext8_codec_destroy; + c->base.handler.encode = charset_ext8_codec_encode; + c->base.handler.decode = charset_ext8_codec_decode; + c->base.handler.reset = charset_ext8_codec_reset; + + *codec = (parserutils_charset_codec *) c; - return (parserutils_charset_codec *) codec; + return PARSERUTILS_OK; } /** * Destroy an extended 8bit codec * * \param codec The codec to destroy + * \return PARSERUTILS_OK on success, appropriate error otherwise */ -void charset_ext8_codec_destroy (parserutils_charset_codec *codec) +parserutils_error charset_ext8_codec_destroy (parserutils_charset_codec *codec) { UNUSED(codec); + + return PARSERUTILS_OK; } /** -- cgit v1.2.3