dovecot-2.0: liblib: Added uni_utf8_to_ucs4_n().

dovecot at dovecot.org dovecot at dovecot.org
Tue May 31 15:36:32 EEST 2011


details:   http://hg.dovecot.org/dovecot-2.0/rev/7a7c22755b7a
changeset: 12828:7a7c22755b7a
user:      Timo Sirainen <tss at iki.fi>
date:      Tue May 31 15:36:22 2011 +0300
description:
liblib: Added uni_utf8_to_ucs4_n().

diffstat:

 src/lib/unichar.c |  20 ++++++++++++++++++++
 src/lib/unichar.h |   2 ++
 2 files changed, 22 insertions(+), 0 deletions(-)

diffs (42 lines):

diff -r 936f6c2ddfdd -r 7a7c22755b7a src/lib/unichar.c
--- a/src/lib/unichar.c	Tue May 24 20:06:24 2011 +0300
+++ b/src/lib/unichar.c	Tue May 31 15:36:22 2011 +0300
@@ -112,6 +112,26 @@
 	return 0;
 }
 
+int uni_utf8_to_ucs4_n(const unsigned char *input, size_t size,
+		       ARRAY_TYPE(unichars) *output)
+{
+	unichar_t chr;
+	unsigned int len;
+
+	while (size > 0) {
+		if (uni_utf8_get_char_n(input, size, &chr) <= 0) {
+			/* invalid input */
+			return -1;
+		}
+		len = uni_utf8_char_bytes(*input);
+		i_assert(len <= size);
+		input += len; size -= len;
+
+		array_append(output, &chr, 1);
+	}
+	return 0;
+}
+
 void uni_ucs4_to_utf8(const unichar_t *input, size_t len, buffer_t *output)
 {
 	for (; len > 0 && *input != '\0'; input++, len--)
diff -r 936f6c2ddfdd -r 7a7c22755b7a src/lib/unichar.h
--- a/src/lib/unichar.h	Tue May 24 20:06:24 2011 +0300
+++ b/src/lib/unichar.h	Tue May 31 15:36:22 2011 +0300
@@ -35,6 +35,8 @@
 /* Translates UTF-8 input to UCS-4 output. Returns 0 if ok, -1 if input was
    invalid */
 int uni_utf8_to_ucs4(const char *input, ARRAY_TYPE(unichars) *output);
+int uni_utf8_to_ucs4_n(const unsigned char *input, size_t size,
+		       ARRAY_TYPE(unichars) *output);
 /* Translates UCS-4 input to UTF-8 output. */
 void uni_ucs4_to_utf8(const unichar_t *input, size_t len, buffer_t *output);
 void uni_ucs4_to_utf8_c(unichar_t chr, buffer_t *output);


More information about the dovecot-cvs mailing list