diff options
author | John Mark Bell <jmb@netsurf-browser.org> | 2005-07-02 14:35:43 +0000 |
---|---|---|
committer | John Mark Bell <jmb@netsurf-browser.org> | 2005-07-02 14:35:43 +0000 |
commit | b81b983b36114b4be64c794012aa0429d1713ddb (patch) | |
tree | 5ae3a80d54540ba1c95c9aa8d0323e5bd4522416 | |
parent | ed5a93caad08489d1c69cdd324eaed7e3728dc90 (diff) | |
download | netsurf-b81b983b36114b4be64c794012aa0429d1713ddb.tar.gz netsurf-b81b983b36114b4be64c794012aa0429d1713ddb.tar.bz2 |
[project @ 2005-07-02 14:35:43 by jmb]
Tidy up
svn path=/import/netsurf/; revision=1773
-rw-r--r-- | utils/utf8.c | 30 |
1 files changed, 13 insertions, 17 deletions
diff --git a/utils/utf8.c b/utils/utf8.c index 3acf9825a..40585b401 100644 --- a/utils/utf8.c +++ b/utils/utf8.c @@ -243,7 +243,7 @@ utf8_convert_ret utf8_convert(const char *string, size_t len, const char *from, const char *to, char **result) { iconv_t cd; - char *ret, *temp, *out, *in; + char *temp, *out, *in; size_t slen, rlen; assert(string && from && to && result); @@ -251,11 +251,11 @@ utf8_convert_ret utf8_convert(const char *string, size_t len, if (strcasecmp(from, to) == 0) { /* conversion from an encoding to itself == strdup */ slen = len ? len : strlen(string); - ret = strndup(string, slen); - if (!ret) + *(result) = strndup(string, slen); + if (!(*result)) { + *(result) = NULL; return UTF8_CONVERT_NOMEM; - - *result = ret; + } return UTF8_CONVERT_OK; } @@ -277,7 +277,7 @@ utf8_convert_ret utf8_convert(const char *string, size_t len, */ rlen = slen * 4 + 4; - temp = out = calloc(rlen, sizeof(char)); + temp = out = malloc(rlen); if (!out) { iconv_close(cd); return UTF8_CONVERT_NOMEM; @@ -297,20 +297,16 @@ utf8_convert_ret utf8_convert(const char *string, size_t len, iconv_close(cd); - if (rlen > 64 /* allow 64bytes wasted space */) { - /* and allocate a more sensibly sized output buffer */ - ret = calloc(out - temp + 4, sizeof(char)); - if (!ret) { - free(temp); - return UTF8_CONVERT_NOMEM; - } - memcpy(ret, temp, out - temp); + *(result) = realloc(temp, out - temp + 4); + if (!(*result)) { free(temp); + *(result) = NULL; /* for sanity's sake */ + return UTF8_CONVERT_NOMEM; } - else - ret = temp; - *result = ret; + /* NULL terminate - needs 4 characters as we may have + * converted to UTF-32 */ + memset((*result) + (out - temp), 0, 4); return UTF8_CONVERT_OK; } |