# HG changeset patch # User Timo Sirainen # Date 1184940001 -10800 # Node ID b9c1336fd4e4ee188dfeaf4ae9aca326938d79df # Parent 60817aa6066dc76a953dd410978244d6400209cb Removed CHARSET_RET_OUTPUT_FULL, it can't happen anymore. diff -r 60817aa6066d -r b9c1336fd4e4 src/lib-charset/charset-iconv.c --- a/src/lib-charset/charset-iconv.c Fri Jul 20 16:56:06 2007 +0300 +++ b/src/lib-charset/charset-iconv.c Fri Jul 20 17:00:01 2007 +0300 @@ -57,14 +57,15 @@ (void)iconv(t->cd, NULL, NULL, NULL, NULL); } -static enum charset_result +static bool charset_to_utf8_try(struct charset_translation *t, - const unsigned char *src, size_t *src_size, buffer_t *dest) + const unsigned char *src, size_t *src_size, buffer_t *dest, + enum charset_result *result) { ICONV_CONST char *ic_srcbuf; char *ic_destbuf; size_t srcleft, destpos, destleft, size; - enum charset_result ret; + bool ret = TRUE; destpos = dest->used; if (t->cd == (iconv_t)-1) { @@ -73,7 +74,9 @@ charset_utf8_ucase_write(dest, destpos, src, *src_size); else buffer_append(dest, src, *src_size); - return CHARSET_RET_OK; + + *result = CHARSET_RET_OK; + return TRUE; } destleft = buffer_get_size(dest) - destpos; if (destleft < *src_size) { @@ -89,14 +92,17 @@ if (iconv(t->cd, &ic_srcbuf, &srcleft, &ic_destbuf, &destleft) != (size_t)-1) - ret = CHARSET_RET_OK; - else if (errno == E2BIG) - ret = CHARSET_RET_OUTPUT_FULL; - else if (errno == EINVAL) - ret = CHARSET_RET_INCOMPLETE_INPUT; + *result = CHARSET_RET_OK; + else if (errno == E2BIG) { + /* set result just to avoid compiler warning */ + *result = CHARSET_RET_INCOMPLETE_INPUT; + ret = FALSE; + } else if (errno == EINVAL) + *result = CHARSET_RET_INCOMPLETE_INPUT; else { /* should be EILSEQ */ - return CHARSET_RET_INVALID_INPUT; + *result = CHARSET_RET_INVALID_INPUT; + return TRUE; } size -= destleft; @@ -116,17 +122,18 @@ charset_to_utf8(struct charset_translation *t, const unsigned char *src, size_t *src_size, buffer_t *dest) { - enum charset_result ret; + enum charset_result result; size_t pos, used, size; + bool ret; for (pos = 0;;) { size = *src_size - pos; - ret = charset_to_utf8_try(t, src + pos, &size, dest); + ret = charset_to_utf8_try(t, src + pos, &size, dest, &result); pos += size; - if (ret != CHARSET_RET_OUTPUT_FULL) { + if (ret) { *src_size = pos; - return ret; + return result; } /* force buffer to grow */ diff -r 60817aa6066d -r b9c1336fd4e4 src/lib-charset/charset-utf8.h --- a/src/lib-charset/charset-utf8.h Fri Jul 20 16:56:06 2007 +0300 +++ b/src/lib-charset/charset-utf8.h Fri Jul 20 17:00:01 2007 +0300 @@ -3,7 +3,6 @@ enum charset_result { CHARSET_RET_OK = 1, - CHARSET_RET_OUTPUT_FULL = 0, CHARSET_RET_INCOMPLETE_INPUT = -1, CHARSET_RET_INVALID_INPUT = -2 };