sdlSnprintf function
This works exactly like snprintf() but doesn't require access to a C runtime.
Format a string of up to maxlen
-1 bytes, converting each '%' item with
values provided through variable arguments.
While some C runtimes differ on how to deal with too-large strings, this
function null-terminates the output, by treating the null-terminator as
part of the maxlen
count. Note that if maxlen
is zero, however, no
bytes will be written at all.
This function returns the number of bytes (not characters) that should
be written, excluding the null-terminator character. If this returns a
number >= maxlen
, it means the output string was truncated. A negative
return value means an error occurred.
Referencing the output string's pointer with a format item is undefined behavior.
\param text the buffer to write the string into. Must not be NULL. \param maxlen the maximum bytes to write, including the null-terminator. \param fmt a printf-style format string. Must not be NULL. \param ... a list of values to be used with the format string. \returns the number of bytes that should be written, not counting the null-terminator char, or a negative value on error.
\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_snprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(3)
Implementation
int sdlSnprintf(Pointer<NativeType> arg0, int maxlen, String? fmt,
Pointer<NativeType> arg3) {
final sdlSnprintfLookupFunction = libSdl3.lookupFunction<
Int32 Function(Pointer<NativeType> arg0, Uint32 maxlen, Pointer<Utf8> fmt,
Pointer<NativeType> arg3),
int Function(Pointer<NativeType> arg0, int maxlen, Pointer<Utf8> fmt,
Pointer<NativeType> arg3)>('SDL_snprintf');
final fmtPointer = fmt != null ? fmt.toNativeUtf8() : nullptr;
final result = sdlSnprintfLookupFunction(arg0, maxlen, fmtPointer, arg3);
calloc.free(fmtPointer);
return result;
}