From: Timo Sirainen Date: Fri, 20 Aug 2010 19:37:31 +0000 (+0100) Subject: Added a global utf8_replacement_char variable. X-Git-Tag: 2.0.1~20 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f2de6ecc4424533633aea705f12d0f691d7ddf81;p=thirdparty%2Fdovecot%2Fcore.git Added a global utf8_replacement_char variable. --- diff --git a/src/lib/unichar.c b/src/lib/unichar.c index 961b2fe96a..6beea290d1 100644 --- a/src/lib/unichar.c +++ b/src/lib/unichar.c @@ -10,6 +10,9 @@ #define HANGUL_FIRST 0xac00 #define HANGUL_LAST 0xd7a3 +const unsigned char utf8_replacement_char[UTF8_REPLACEMENT_CHAR_LEN] = + { 0xef, 0xbf, 0xbd }; /* 0xfffd */ + static const uint8_t utf8_non1_bytes[256 - 192 - 2] = { 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,6,6,1,1 @@ -269,18 +272,14 @@ static bool uni_ucs4_decompose_multi_utf8(unichar_t chr, buffer_t *output) static void output_add_replacement_char(buffer_t *output) { - /* 0xfffd */ - static const unsigned char replacement_utf8[] = { 0xef, 0xbf, 0xbd }; -#define REPLACEMENT_UTF8_LEN 3 - - if (output->used >= REPLACEMENT_UTF8_LEN && + if (output->used >= UTF8_REPLACEMENT_CHAR_LEN && memcmp(CONST_PTR_OFFSET(output->data, - output->used - REPLACEMENT_UTF8_LEN), - replacement_utf8, REPLACEMENT_UTF8_LEN) == 0) { + output->used - UTF8_REPLACEMENT_CHAR_LEN), + utf8_replacement_char, UTF8_REPLACEMENT_CHAR_LEN) == 0) { /* don't add the replacement char multiple times */ return; } - buffer_append(output, replacement_utf8, REPLACEMENT_UTF8_LEN); + buffer_append(output, utf8_replacement_char, UTF8_REPLACEMENT_CHAR_LEN); } int uni_utf8_to_decomposed_titlecase(const void *_input, size_t max_len, diff --git a/src/lib/unichar.h b/src/lib/unichar.h index 3132bd1bec..ce8222b6fd 100644 --- a/src/lib/unichar.h +++ b/src/lib/unichar.h @@ -22,9 +22,12 @@ (UTF16_SURROGATE_LOW_FIRST + \ (((chr) - UTF16_SURROGATE_BASE) & UTF16_SURROGATE_MASK)) +#define UTF8_REPLACEMENT_CHAR_LEN 3 + typedef uint32_t unichar_t; ARRAY_DEFINE_TYPE(unichars, unichar_t); +extern const unsigned char utf8_replacement_char[UTF8_REPLACEMENT_CHAR_LEN]; extern const uint8_t *const uni_utf8_non1_bytes; /* Returns number of characters in a NUL-terminated unicode string */