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