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