Mercurial > dovecot > original-hg > dovecot-1.2
changeset 6952:08e4d7efcd6a HEAD
uni_utf8_get_valid_data() API changed.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sat, 08 Dec 2007 15:53:15 +0200 |
parents | 1f70c72e4312 |
children | edd296d164db |
files | src/lib-mail/message-decoder.c src/lib/unichar.c src/lib/unichar.h |
diffstat | 3 files changed, 26 insertions(+), 24 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-mail/message-decoder.c Sat Dec 08 15:45:17 2007 +0200 +++ b/src/lib-mail/message-decoder.c Sat Dec 08 15:53:15 2007 +0200 @@ -316,21 +316,29 @@ } if (ctx->charset_utf8) { + buffer_set_used_size(ctx->buf2, 0); if (ctx->dtcase) { - buffer_set_used_size(ctx->buf2, 0); (void)uni_utf8_to_decomposed_titlecase(data, size, ctx->buf2); output->data = ctx->buf2->data; output->size = ctx->buf2->used; + } else if (uni_utf8_get_valid_data(data, size, ctx->buf2)) { + output->data = data; + output->size = size; } else { - output->data = - uni_utf8_get_valid_data(data, size, ctx->buf2, - &output->size); + output->data = ctx->buf2->data; + output->size = ctx->buf2->used; } } else if (ctx->charset_trans == NULL) { /* unknown charset */ - output->data = uni_utf8_get_valid_data(data, size, ctx->buf2, - &output->size); + buffer_set_used_size(ctx->buf2, 0); + if (uni_utf8_get_valid_data(data, size, ctx->buf2)) { + output->data = data; + output->size = size; + } else { + output->data = ctx->buf2->data; + output->size = ctx->buf2->used; + } } else { buffer_set_used_size(ctx->buf2, 0); if (ctx->translation_size != 0)
--- a/src/lib/unichar.c Sat Dec 08 15:45:17 2007 +0200 +++ b/src/lib/unichar.c Sat Dec 08 15:53:15 2007 +0200 @@ -302,9 +302,8 @@ return len; } -const unsigned char * -uni_utf8_get_valid_data(const unsigned char *input, size_t size, - buffer_t *tmpbuf, size_t *output_size_r) +bool uni_utf8_get_valid_data(const unsigned char *input, size_t size, + buffer_t *buf) { size_t i, len; @@ -319,17 +318,14 @@ i += len; } } - /* we can use it as-is */ - *output_size_r = size; - return input; + return TRUE; broken: /* broken utf-8 input - skip the broken characters */ - buffer_set_used_size(tmpbuf, 0); - buffer_append(tmpbuf, input, i++); + buffer_append(buf, input, i++); while (i < size) { if (input[i] < 0x80) { - buffer_append_c(tmpbuf, input[i++]); + buffer_append_c(buf, input[i++]); continue; } @@ -338,9 +334,8 @@ i++; continue; } - buffer_append(tmpbuf, input + i, len); + buffer_append(buf, input + i, len); i += len; } - *output_size_r = tmpbuf->used; - return tmpbuf->data; + return FALSE; }
--- a/src/lib/unichar.h Sat Dec 08 15:45:17 2007 +0200 +++ b/src/lib/unichar.h Sat Dec 08 15:53:15 2007 +0200 @@ -40,11 +40,10 @@ int uni_utf8_to_decomposed_titlecase(const void *input, size_t max_len, buffer_t *output); -/* If input contains only valid UTF-8 input, return it directly. If input - contains invalid UTF-8 input, write only valid UTF-8 characters to the - given buffer and return it. */ -const unsigned char * -uni_utf8_get_valid_data(const unsigned char *input, size_t size, - buffer_t *tmpbuf, size_t *output_size_r); +/* If input contains only valid UTF-8 characters, return TRUE. If input + contains invalid UTF-8 characters, write only the valid ones to buf and + return FALSE. */ +bool uni_utf8_get_valid_data(const unsigned char *input, size_t size, + buffer_t *buf); #endif