]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
unichar: Add uni_is_valid_ucs4
authorAki Tuomi <aki.tuomi@dovecot.fi>
Fri, 20 Oct 2017 10:14:02 +0000 (13:14 +0300)
committerAki Tuomi <aki.tuomi@dovecot.fi>
Mon, 23 Oct 2017 11:27:10 +0000 (14:27 +0300)
src/lib/unichar.h

index 546c8e101a1991eed5e9388f33a4dc557c00d836..9c8fdc401fe263fe6931f8ebfc3573f8dcb66f2e 100644 (file)
@@ -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