#include <sys/utfconv.h>
sys/utfconv.h
macroUTF_REVERSE_ENDIAN
UTF-8 encode/decode flags
#define UTF_REVERSE_ENDIAN 0x0001
reverse UCS-2 byte order
macroUTF_BIG_ENDIAN
#define UTF_BIG_ENDIAN ((BYTE_ORDER == BIG_ENDIAN) ? 0 : UTF_REVERSE_ENDIAN)
macroUTF_LITTLE_ENDIAN
#define UTF_LITTLE_ENDIAN ((BYTE_ORDER == LITTLE_ENDIAN) ? 0 : UTF_REVERSE_ENDIAN)
functionunicode_combinable
int unicode_combinable(u_int16_t character)
▾
claude-fable-5, 2026-08-23 · not from Apple sources · verified against xnu bsd/vfs/vfs_utfconv.c
Tests whether a UTF-16 code unit is a combining character, using a bitmap lookup. Similar to CoreFoundation's __CFUniCharIsNonBaseCharacter, except that Hangul Jamo characters are also included. Returns 1 if combining, 0 otherwise; characters below U+0300 always return 0. Used by the HFS-style UTF-8 conversion and normalization routines in utf8_encodestr/utf8_decodestr.
functionunicode_decomposeable
int unicode_decomposeable(u_int16_t character)
▾
claude-fable-5, 2026-08-23 · not from Apple sources · verified against xnu bsd/vfs/vfs_utfconv.c
Tests whether a UTF-16 code unit is a precomposed character that can be decomposed, using a bitmap lookup similar to CoreFoundation's __CFUniCharIsDecomposableCharacter. Returns 1 if decomposable, 0 otherwise; characters below U+00C0 always return 0. Used by the UTF-8 conversion routines when producing decomposed (HFS-normalized) names.
functionutf8_encodelen
size_t utf8_encodelen( const u_int16_t * ucsp, size_t ucslen, u_int16_t altslash, int flags )
utf8_encodelen - Calculate the UTF-8 encoding length
This function takes an Unicode input string, ucsp, of ucslen bytes
and calculates the size of the UTF-8 output in bytes (not including
a NULL termination byte). The string must reside in kernel memory.
FLAGS
UTF_REVERSE_ENDIAN: Unicode byte order is opposite current runtime
UTF_BIG_ENDIAN: Unicode byte order is always big endian
UTF_LITTLE_ENDIAN: Unicode byte order is always little endian
UTF_DECOMPOSED: assume fully decomposed output
ERRORS
None
functionutf8_encodestr
int utf8_encodestr( const u_int16_t * ucsp, size_t ucslen, u_int8_t * utf8p, size_t * utf8len, size_t buflen, u_int16_t altslash, int flags )
utf8_encodestr - Encodes a Unicode string into UTF-8
This function takes an Unicode input string, ucsp, of ucslen bytes
and produces the UTF-8 output into a buffer of buflen bytes pointed
to by utf8p. The size of the output in bytes (not including a NULL
termination byte) is returned in utf8len. The UTF-8 string output
is NULL terminated. Both buffers must reside in kernel memory.
If '/' chars are possible in the Unicode input then an alternate
(replacement) char must be provided in altslash.
FLAGS
UTF_REVERSE_ENDIAN: Unicode byte order is opposite current runtime
UTF_BIG_ENDIAN: Unicode byte order is always big endian
UTF_LITTLE_ENDIAN: Unicode byte order is always little endian
UTF_NO_NULL_TERM: do not add null termination to output string
UTF_DECOMPOSED: generate fully decomposed output
ERRORS
ENAMETOOLONG: output did not fit; only utf8len bytes were encoded
EINVAL: illegal Unicode char encountered
functionutf8_decodestr
int utf8_decodestr( const u_int8_t* utf8p, size_t utf8len, u_int16_t* ucsp, size_t *ucslen, size_t buflen, u_int16_t altslash, int flags )
utf8_decodestr - Decodes a UTF-8 string into Unicode
This function takes an UTF-8 input string, utf8p, of utf8len bytes
and produces the Unicode output into a buffer of buflen bytes pointed
to by ucsp. The size of the output in bytes (not including a NULL
termination byte) is returned in ucslen. Both buffers must reside
in kernel memory.
If '/' chars are allowed in the Unicode output then an alternate
(replacement) char must be provided in altslash.
FLAGS
UTF_REV_ENDIAN: Unicode byte order is opposite current runtime
UTF_BIG_ENDIAN: Unicode byte order is always big endian
UTF_LITTLE_ENDIAN: Unicode byte order is always little endian
UTF_DECOMPOSED: generate fully decomposed output (NFD)
UTF_PRECOMPOSED: generate precomposed output (NFC)
UTF_ESCAPE_ILLEGAL: percent escape any illegal UTF-8 input
ERRORS
ENAMETOOLONG: output did not fit; only ucslen bytes were decoded.
EINVAL: illegal UTF-8 sequence encountered.
functionutf8_normalizestr
int utf8_normalizestr( const u_int8_t* instr, size_t inlen, u_int8_t* outstr, size_t *outlen, size_t buflen, int flags )
utf8_normalizestr - Normalize a UTF-8 string (NFC or NFD)
This function takes an UTF-8 input string, instr, of inlen bytes
and produces normalized UTF-8 output into a buffer of buflen bytes
pointed to by outstr. The size of the output in bytes (not including
a NULL termination byte) is returned in outlen. In-place conversions
are not supported (i.e. instr != outstr). Both buffers must reside
in kernel memory.
FLAGS
UTF_DECOMPOSED: output string will be fully decomposed (NFD)
UTF_PRECOMPOSED: output string will be precomposed (NFC)
UTF_NO_NULL_TERM: do not add null termination to output string
UTF_ESCAPE_ILLEGAL: percent escape any illegal UTF-8 input
ERRORS
ENAMETOOLONG: output did not fit or input exceeded MAXPATHLEN bytes
EINVAL: illegal UTF-8 sequence encountered or invalid flags
functionutf8_validatestr
int utf8_validatestr(const u_int8_t* utf8p, size_t utf8len)
utf8_validatestr - validates a UTF-8 string
This function takes an UTF-8 input string, utf8p, of utf8len bytes
and determines if its valid UTF-8. The string must reside in kernel
memory.
ERRORS
EINVAL: illegal UTF-8 sequence encountered.