ReactOS 0.4.17-dev-573-g8315b8c
c99_printf_hacks.c
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS SDK
3 * LICENSE: MIT (https://spdx.org/licenses/MIT)
4 * PURPOSE: C99 printf-family shims for llvm-mingw runtime libraries
5 * COPYRIGHT: Copyright 2026 Ahmed Arif <arif.ing@outlook.com>
6 */
7
8#include <stdio.h>
9#include <stdarg.h>
10
11/* llvm-mingw's libc++ needs the C99 vsnprintf/snprintf contract, which msvcrt's _vsnprintf (aliased onto
12 * these names by the crt headers) does not follow: undo the mapping and bridge over _vsnprintf/_vscprintf */
13#undef vsnprintf
14#undef snprintf
15
16int vsnprintf(char *buffer, size_t count, const char *format, va_list argptr)
17{
18 va_list ap;
19 int result;
20
21 va_copy(ap, argptr);
23 va_end(ap);
24
25 if (result >= 0 && (size_t)result < count)
26 return result;
27
28 /* Truncated: terminate and return the would-be length */
29 if (count != 0)
30 buffer[count - 1] = '\0';
31
32 va_copy(ap, argptr);
34 va_end(ap);
35
36 return result;
37}
38
39int snprintf(char *buffer, size_t count, const char *format, ...)
40{
41 va_list argptr;
42 int result;
43
44 va_start(argptr, format);
45 result = vsnprintf(buffer, count, format, argptr);
46 va_end(argptr);
47
48 return result;
49}
#define vsnprintf
Definition: acwin.h:108
#define va_copy(d, s)
Definition: stdarg.h:29
#define va_end(v)
Definition: stdarg.h:28
#define va_start(v, l)
Definition: stdarg.h:26
char * va_list
Definition: vadefs.h:50
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLuint buffer
Definition: glext.h:5915
GLuint64EXT * result
Definition: glext.h:11304
#define _vscprintf
Definition: _vscprintf.c:25
#define _vsnprintf
Definition: _vsnprintf.c:28
Definition: format.c:58
void int int ULONGLONG int va_list * ap
Definition: winesup.h:36
#define snprintf
Definition: wintirpc.h:48