mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-11-10 19:36:18 +01:00
72528938b7
The HAVE_GOOD_PRINTF config variable determines whether we are able to use the CRT-supplied *printf() functions directly, by determining whether the CRT-supplied vsnprintf() and snprintf() functions support C99 well enough. This means, we need to build the gnulib subdir as a static lib in GLib, and use the gnulib *printf() functions when: -We are on Windows -The CRT's vsnprintf() and snprintf() is not sufficiently C99-compliant. This will fix the problem when the *printf() functions cause a CRT abort() call on pre-2015 Visual Studio builds at least, and ensures that the Visual Studio 2015+ builds will pass the printf tests in GLib, since the *printf() in Visual Studio 2015/2017's CRT does not support the %n format specifier, nor the positional parameters (which requires different _*printf_p*() functions), as indicated by glib/tests/test-printf.c. https://bugzilla.gnome.org/show_bug.cgi?id=783270 |
||
---|---|---|
.. | ||
asnprintf.c | ||
g-gnulib.h | ||
Makefile.am | ||
meson.build | ||
printf-args.c | ||
printf-args.h | ||
printf-parse.c | ||
printf-parse.h | ||
printf.c | ||
printf.h | ||
README | ||
vasnprintf.c | ||
vasnprintf.h | ||
verify.h | ||
xsize.h |
The files asnprintf.c printf-args.c printf-args.h printf-parse.c printf-parse.h vasnprintf.c vasnprintf.h are taken from the vasnprintf module of the GNUlib package, which can be found at: http://www.gnu.org/software/gnulib/ All files have been modified to include g-gnulib.h. vasnprintf.c has also been modified to include support for long long printing if the system printf doesn't. This code is protected by #ifndef HAVE_LONG_LONG_FORMAT. Code has been added to printf-args.[ch], printf-parse.c and vasnprintf.c to support printing of __int64 values with the I64 format modifier. This is protected by #ifdef HAVE_INT64_AND_I64. The files printf.h printf.c g-gnulib.h have been written by me. printf.[hc] contain implementations of the remaining functions in the printf family based on vasnprintf. g-gnulib.h is included by all source files in order to move all exported functions to the _g_gnulib namespace, replace malloc by g_malloc and make sure that snprintf is only used if it implements C99 return value semantics. Matthias Clasen November 1, 2003