sdlUtf8strnlen function
Count the number of codepoints in a UTF-8 string, up to n bytes.
Counts the codepoints, not bytes, in str
, excluding the null
terminator.
If you need to count the bytes in a string instead, consider using SDL_strnlen().
The counting stops at bytes
bytes (not codepoints!). This seems
counterintuitive, but makes it easy to express the total size of the
string's buffer.
Since this handles Unicode, it expects the strings to be well-formed UTF-8 and not a null-terminated string of arbitrary bytes. Bytes that are not valid UTF-8 are treated as Unicode character U+FFFD (REPLACEMENT CHARACTER), so a malformed or incomplete UTF-8 sequence might increase the count by several replacement characters.
\param str The null-terminated UTF-8 string to read. Must not be NULL.
\param bytes The maximum amount of bytes to count.
\returns The length (in codepoints, excluding the null terminator) of src
but never more than maxlen
.
\threadsafety It is safe to call this function from any thread.
\since This function is available since SDL 3.1.3.
\sa SDL_utf8strlen \sa SDL_strnlen
extern SDL_DECLSPEC size_t SDLCALL SDL_utf8strnlen(const char *str, size_t bytes)
Implementation
int sdlUtf8strnlen(String? str, int bytes) {
final sdlUtf8strnlenLookupFunction = libSdl3.lookupFunction<
Uint32 Function(Pointer<Utf8> str, Uint32 bytes),
int Function(Pointer<Utf8> str, int bytes)>('SDL_utf8strnlen');
final strPointer = str != null ? str.toNativeUtf8() : nullptr;
final result = sdlUtf8strnlenLookupFunction(strPointer, bytes);
calloc.free(strPointer);
return result;
}