On Wed, 12 Jan 2022, Pali Rohár wrote:
Original MSVC 6.0 msvcrt.dll library does not provide _vscprintf()
function. MinGW-w64 __ms_snprintf() and __ms_vsnprintf() implementations
call _vscprintf() function. So include fallback _vscprintf() implementation
into MinGW-w64 crt code to allow applications to use snprintf() with
original MSVC 6.0 msvcrt.dll library.
---
mingw-w64-crt/Makefile.am | 1 +
mingw-w64-crt/lib-common/msvcrt.def.in | 4 ++
mingw-w64-crt/misc/_vscprintf.c | 72 ++++++++++++++++++++++++++
3 files changed, 77 insertions(+)
create mode 100644 mingw-w64-crt/misc/_vscprintf.c
diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am
index e6b644ec1d44..1be9250c1e53 100644
--- a/mingw-w64-crt/Makefile.am
+++ b/mingw-w64-crt/Makefile.am
@@ -282,6 +282,7 @@ src_msvcrt32=\
misc/_create_locale.c \
misc/_free_locale.c \
misc/_get_current_locale.c \
+ misc/_vscprintf.c \
misc/lc_locale_func.c \
misc/wassert.c
diff --git a/mingw-w64-crt/lib-common/msvcrt.def.in
b/mingw-w64-crt/lib-common/msvcrt.def.in
index 0ea9d388fbe4..17bc7e9a076e 100644
--- a/mingw-w64-crt/lib-common/msvcrt.def.in
+++ b/mingw-w64-crt/lib-common/msvcrt.def.in
@@ -1111,7 +1111,11 @@ _vprintf_l
_vprintf_p
_vprintf_p_l
_vprintf_s_l
+#ifdef DEF_I386
+; _vscprintf Replaced by emu
+#else
_vscprintf
+#endif
We've got neater macros that avoid needing to spend many lines on this;
you can make it F_NON_I386(_vscprintf) instead of spelling out the ifdef.
See def-include/func.def.in for the full set of macros you can use for
conditional availability.
+int (__cdecl *__MINGW_IMP_SYMBOL(_vscprintf))(const char * __restrict__,
va_list) = init_vscprintf;
This provides __imp___vscprintf only, but not __vscprintf, while
lib32_libmingwex_a-vsnprintf.o has an undefined reference to __vscprintf.
Linking still works, but this forces the linker to do an autoimport of the
symbol, which is quite suboptimal. So it would be best if this object file
would provide the prefix-less regular function too, which just calls what
the __imp_ prefixed symbol points at.
// Martin
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public