sdlStrncmp function
Compare two UTF-8 strings up to a number of bytes.
Due to the nature of UTF-8 encoding, this will work with Unicode strings, since effectively this function just compares bytes until it hits a null-terminating character. Also due to the nature of UTF-8, this can be used with SDL_qsort() to put strings in (roughly) alphabetical order.
Note that while this function is intended to be used with UTF-8, it is
doing a bytewise comparison, and maxlen
specifies a byte limit! If the
limit lands in the middle of a multi-byte UTF-8 sequence, it will only
compare a portion of the final character.
maxlen
specifies a maximum number of bytes to compare; if the strings
match to this number of bytes (or both have matched to a null-terminator
character before this number of bytes), they will be considered equal.
\param str1 the first string to compare. NULL is not permitted! \param str2 the second string to compare. NULL is not permitted! \param maxlen the maximum number of bytes to compare. \returns less than zero if str1 is "less than" str2, greater than zero if str1 is "greater than" str2, and zero if the strings match exactly.
\threadsafety It is safe to call this function from any thread.
\since This function is available since SDL 3.1.3.
extern SDL_DECLSPEC int SDLCALL SDL_strncmp(const char *str1, const char *str2, size_t maxlen)
Implementation
int sdlStrncmp(String? str1, String? str2, int maxlen) {
final sdlStrncmpLookupFunction = libSdl3.lookupFunction<
Int32 Function(Pointer<Utf8> str1, Pointer<Utf8> str2, Uint32 maxlen),
int Function(
Pointer<Utf8> str1, Pointer<Utf8> str2, int maxlen)>('SDL_strncmp');
final str1Pointer = str1 != null ? str1.toNativeUtf8() : nullptr;
final str2Pointer = str2 != null ? str2.toNativeUtf8() : nullptr;
final result = sdlStrncmpLookupFunction(str1Pointer, str2Pointer, maxlen);
calloc.free(str1Pointer);
calloc.free(str2Pointer);
return result;
}