From: Aki Tuomi Date: Fri, 20 Oct 2017 10:14:02 +0000 (+0300) Subject: unichar: Add uni_is_valid_ucs4 X-Git-Tag: 2.3.0.rc1~787 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5fc1d7c7caffa7e5616a1681503dfea0fc582aae;p=thirdparty%2Fdovecot%2Fcore.git unichar: Add uni_is_valid_ucs4 --- diff --git a/src/lib/unichar.h b/src/lib/unichar.h index 546c8e101a..9c8fdc401f 100644 --- a/src/lib/unichar.h +++ b/src/lib/unichar.h @@ -30,6 +30,8 @@ #define UTF8_REPLACEMENT_CHAR_LEN 3 +#define UNICHAR_T_MAX 0x10ffff + typedef uint32_t unichar_t; ARRAY_DEFINE_TYPE(unichars, unichar_t); @@ -42,6 +44,12 @@ typedef int normalizer_func_t(const void *input, size_t size, extern const unsigned char utf8_replacement_char[UTF8_REPLACEMENT_CHAR_LEN]; extern const uint8_t *const uni_utf8_non1_bytes; +static inline bool ATTR_PURE uni_is_valid_ucs4(unichar_t chr) +{ + return (chr & 0xfff800) != UTF16_SURROGATE_HIGH_FIRST && + chr <= UNICHAR_T_MAX; +}; + /* Returns number of characters in a NUL-terminated unicode string */ unsigned int uni_strlen(const unichar_t *str) ATTR_PURE; /* Translates UTF-8 input to UCS-4 output. Returns 0 if ok, -1 if input was