dovecot: uni_utf8_get_valid_data() API changed.
dovecot at dovecot.org
dovecot at dovecot.org
Sat Dec 8 15:55:13 EET 2007
details: http://hg.dovecot.org/dovecot/rev/08e4d7efcd6a
changeset: 6952:08e4d7efcd6a
user: Timo Sirainen <tss at iki.fi>
date: Sat Dec 08 15:53:15 2007 +0200
description:
uni_utf8_get_valid_data() API changed.
diffstat:
3 files changed, 27 insertions(+), 25 deletions(-)
src/lib-mail/message-decoder.c | 20 ++++++++++++++------
src/lib/unichar.c | 21 ++++++++-------------
src/lib/unichar.h | 11 +++++------
diffs (108 lines):
diff -r 1f70c72e4312 -r 08e4d7efcd6a src/lib-mail/message-decoder.c
--- 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 @@ static bool message_decode_body(struct m
}
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)
diff -r 1f70c72e4312 -r 08e4d7efcd6a src/lib/unichar.c
--- 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 @@ is_valid_utf8_seq(const unsigned char *i
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 @@ uni_utf8_get_valid_data(const unsigned c
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 @@ broken:
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;
+}
diff -r 1f70c72e4312 -r 08e4d7efcd6a src/lib/unichar.h
--- 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(con
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
More information about the dovecot-cvs
mailing list