Mercurial > dovecot > original-hg > dovecot-1.2
diff src/lib-charset/charset-iconv.c @ 785:d96cbba73a8b HEAD
Don't use Buffers with read-only data, just makes it more difficult without
gaining anything.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 16 Dec 2002 05:59:06 +0200 |
parents | 03832c7f389b |
children | d573c53946ac |
line wrap: on
line diff
--- a/src/lib-charset/charset-iconv.c Mon Dec 16 05:27:35 2002 +0200 +++ b/src/lib-charset/charset-iconv.c Mon Dec 16 05:59:06 2002 +0200 @@ -69,7 +69,7 @@ CharsetResult charset_to_ucase_utf8(CharsetTranslation *t, - const Buffer *src, size_t *src_pos, Buffer *dest) + const unsigned char *src, size_t *src_size, Buffer *dest) { ICONV_CONST char *ic_srcbuf; char *ic_destbuf; @@ -81,18 +81,15 @@ if (t->cd == NULL) { /* no translation needed - just copy it to outbuf uppercased */ - size = buffer_get_used_size(src); - if (size > destleft) - size = destleft; - _charset_utf8_ucase(buffer_get_data(src, NULL), - size, dest, destpos); - if (src_pos != NULL) - *src_pos = size; + if (*src_size > destleft) + *src_size = destleft; + _charset_utf8_ucase(src, *src_size, dest, destpos); return CHARSET_RET_OK; } size = destleft; - ic_srcbuf = (ICONV_CONST char *) buffer_get_data(src, &srcleft); + srcleft = *src_size; + ic_srcbuf = (ICONV_CONST char *) src; ic_destbuf = buffer_append_space(dest, destleft); if (iconv(t->cd, &ic_srcbuf, &srcleft, @@ -111,9 +108,7 @@ /* give back the memory we didn't use */ buffer_set_used_size(dest, buffer_get_used_size(dest) - destleft); - if (src_pos != NULL) - *src_pos = buffer_get_used_size(src) - srcleft; - + *src_size -= srcleft; _charset_utf8_ucase((unsigned char *) ic_destbuf - size, size, dest, destpos); return ret; @@ -121,7 +116,8 @@ const char * charset_to_ucase_utf8_string(const char *charset, int *unknown_charset, - const Buffer *data, size_t *utf8_size) + const unsigned char *data, size_t size, + size_t *utf8_size_r) { iconv_t cd; ICONV_CONST char *inbuf; @@ -134,7 +130,7 @@ strcasecmp(charset, "UTF8") == 0) { if (unknown_charset != NULL) *unknown_charset = FALSE; - return _charset_utf8_ucase_strdup(data, utf8_size); + return _charset_utf8_ucase_strdup(data, size, utf8_size_r); } cd = iconv_open("UTF-8", charset); @@ -147,7 +143,8 @@ if (unknown_charset != NULL) *unknown_charset = FALSE; - inbuf = (ICONV_CONST char *) buffer_get_data(data, &inleft);; + inbuf = (ICONV_CONST char *) data; + inleft = size; outsize = outleft = inleft * 2; outbuf = outpos = t_buffer_get(outsize + 1); @@ -168,8 +165,8 @@ outpos = outbuf + pos; } - if (utf8_size != NULL) - *utf8_size = (size_t) (outpos - outbuf); + if (utf8_size_r != NULL) + *utf8_size_r = (size_t) (outpos - outbuf); *outpos++ = '\0'; t_buffer_alloc((size_t) (outpos - outbuf));