Ensure that all those __ms_* scanf functions calls __stdio_common_* scanf
functions with compatibility options, as it is required for msvcrt.dll
compatibility and also because tchar.h macros depends on that old legacy
behavior.
For compatibility call __stdio_common_*scanf function always with
_CRT_INTERNAL_SCANF_LEGACY_MSVCRT_COMPATIBILITY option.
And for wide functions use _CRT_INTERNAL_SCANF_LEGACY_WIDE_SPECIFIERS
option which ensures that %s for wide functions expects wide wchar_t*
string (instead of char*).
---
mingw-w64-crt/Makefile.am | 12 ++++++++++++
mingw-w64-crt/stdio/ucrt/__ms_fscanf.c | 22 ++++++++++++++++++++++
mingw-w64-crt/stdio/ucrt/__ms_fwscanf.c | 22 ++++++++++++++++++++++
mingw-w64-crt/stdio/ucrt/__ms_scanf.c | 22 ++++++++++++++++++++++
mingw-w64-crt/stdio/ucrt/__ms_sscanf.c | 22 ++++++++++++++++++++++
mingw-w64-crt/stdio/ucrt/__ms_swscanf.c | 22 ++++++++++++++++++++++
mingw-w64-crt/stdio/ucrt/__ms_vfscanf.c | 17 +++++++++++++++++
mingw-w64-crt/stdio/ucrt/__ms_vfwscanf.c | 17 +++++++++++++++++
mingw-w64-crt/stdio/ucrt/__ms_vscanf.c | 16 ++++++++++++++++
mingw-w64-crt/stdio/ucrt/__ms_vsscanf.c | 17 +++++++++++++++++
mingw-w64-crt/stdio/ucrt/__ms_vswscanf.c | 17 +++++++++++++++++
mingw-w64-crt/stdio/ucrt/__ms_vwscanf.c | 16 ++++++++++++++++
mingw-w64-crt/stdio/ucrt/__ms_wscanf.c | 22 ++++++++++++++++++++++
13 files changed, 244 insertions(+)
create mode 100644 mingw-w64-crt/stdio/ucrt/__ms_fscanf.c
create mode 100644 mingw-w64-crt/stdio/ucrt/__ms_fwscanf.c
create mode 100644 mingw-w64-crt/stdio/ucrt/__ms_scanf.c
create mode 100644 mingw-w64-crt/stdio/ucrt/__ms_sscanf.c
create mode 100644 mingw-w64-crt/stdio/ucrt/__ms_swscanf.c
create mode 100644 mingw-w64-crt/stdio/ucrt/__ms_vfscanf.c
create mode 100644 mingw-w64-crt/stdio/ucrt/__ms_vfwscanf.c
create mode 100644 mingw-w64-crt/stdio/ucrt/__ms_vscanf.c
create mode 100644 mingw-w64-crt/stdio/ucrt/__ms_vsscanf.c
create mode 100644 mingw-w64-crt/stdio/ucrt/__ms_vswscanf.c
create mode 100644 mingw-w64-crt/stdio/ucrt/__ms_vwscanf.c
create mode 100644 mingw-w64-crt/stdio/ucrt/__ms_wscanf.c
diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am
index f48661319a94..aae597f6eee0 100644
--- a/mingw-w64-crt/Makefile.am
+++ b/mingw-w64-crt/Makefile.am
@@ -396,21 +396,33 @@ src_ucrtbase=\
stdio/ucrt_fprintf.c \
stdio/ucrt_fscanf.c \
stdio/ucrt/__ms_fprintf.c \
+ stdio/ucrt/__ms_fscanf.c \
stdio/ucrt/__ms_fwprintf.c \
+ stdio/ucrt/__ms_fwscanf.c \
stdio/ucrt/__ms_printf.c \
+ stdio/ucrt/__ms_scanf.c \
stdio/ucrt/__ms_snprintf.c \
stdio/ucrt/__ms_snwprintf.c \
stdio/ucrt/__ms_sprintf.c \
+ stdio/ucrt/__ms_sscanf.c \
stdio/ucrt/__ms_swprintf.c \
+ stdio/ucrt/__ms_swscanf.c \
stdio/ucrt/__ms_vfprintf.c \
+ stdio/ucrt/__ms_vfscanf.c \
stdio/ucrt/__ms_vfwprintf.c \
+ stdio/ucrt/__ms_vfwscanf.c \
stdio/ucrt/__ms_vprintf.c \
+ stdio/ucrt/__ms_vscanf.c \
stdio/ucrt/__ms_vsnprintf.c \
stdio/ucrt/__ms_vsnwprintf.c \
stdio/ucrt/__ms_vsprintf.c \
+ stdio/ucrt/__ms_vsscanf.c \
stdio/ucrt/__ms_vswprintf.c \
+ stdio/ucrt/__ms_vswscanf.c \
stdio/ucrt/__ms_vwprintf.c \
+ stdio/ucrt/__ms_vwscanf.c \
stdio/ucrt/__ms_wprintf.c \
+ stdio/ucrt/__ms_wscanf.c \
stdio/ucrt_fwprintf.c \
stdio/ucrt_printf.c \
stdio/ucrt_scanf.c \
diff --git a/mingw-w64-crt/stdio/ucrt/__ms_fscanf.c
b/mingw-w64-crt/stdio/ucrt/__ms_fscanf.c
new file mode 100644
index 000000000000..74f00006b746
--- /dev/null
+++ b/mingw-w64-crt/stdio/ucrt/__ms_fscanf.c
@@ -0,0 +1,22 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#undef __MSVCRT_VERSION__
+#define _UCRT
+
+#include <stdio.h>
+#include <stdarg.h>
+
+int __cdecl __ms_fscanf(FILE * restrict file, const char * restrict format,
...)
+{
+ va_list ap;
+ int ret;
+ va_start(ap, format);
+ ret = __ms_vfscanf(file, format, ap);
+ va_end(ap);
+ return ret;
+}
+int __cdecl (*__MINGW_IMP_SYMBOL(__ms_fscanf))(FILE * restrict, const char *
restrict, ...) = __ms_fscanf;
diff --git a/mingw-w64-crt/stdio/ucrt/__ms_fwscanf.c
b/mingw-w64-crt/stdio/ucrt/__ms_fwscanf.c
new file mode 100644
index 000000000000..f18fdfb9252f
--- /dev/null
+++ b/mingw-w64-crt/stdio/ucrt/__ms_fwscanf.c
@@ -0,0 +1,22 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#undef __MSVCRT_VERSION__
+#define _UCRT
+
+#include <stdio.h>
+#include <stdarg.h>
+
+int __cdecl __ms_fwscanf(FILE * restrict file, const wchar_t * restrict
format, ...)
+{
+ va_list ap;
+ int ret;
+ va_start(ap, format);
+ ret = __ms_vfwscanf(file, format, ap);
+ va_end(ap);
+ return ret;
+}
+int __cdecl (*__MINGW_IMP_SYMBOL(__ms_fwscanf))(FILE * restrict, const wchar_t
* restrict, ...) = __ms_fwscanf;
diff --git a/mingw-w64-crt/stdio/ucrt/__ms_scanf.c
b/mingw-w64-crt/stdio/ucrt/__ms_scanf.c
new file mode 100644
index 000000000000..e9b84a89058b
--- /dev/null
+++ b/mingw-w64-crt/stdio/ucrt/__ms_scanf.c
@@ -0,0 +1,22 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#undef __MSVCRT_VERSION__
+#define _UCRT
+
+#include <stdio.h>
+#include <stdarg.h>
+
+int __cdecl __ms_scanf(const char * restrict format, ...)
+{
+ va_list ap;
+ int ret;
+ va_start(ap, format);
+ ret = __ms_vscanf(format, ap);
+ va_end(ap);
+ return ret;
+}
+int __cdecl (*__MINGW_IMP_SYMBOL(__ms_scanf))(const char * restrict, ...) =
__ms_scanf;
diff --git a/mingw-w64-crt/stdio/ucrt/__ms_sscanf.c
b/mingw-w64-crt/stdio/ucrt/__ms_sscanf.c
new file mode 100644
index 000000000000..bb970b98e4c4
--- /dev/null
+++ b/mingw-w64-crt/stdio/ucrt/__ms_sscanf.c
@@ -0,0 +1,22 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#undef __MSVCRT_VERSION__
+#define _UCRT
+
+#include <stdio.h>
+#include <stdarg.h>
+
+int __cdecl __ms_sscanf(const char * restrict str, const char * restrict
format, ...)
+{
+ va_list ap;
+ int ret;
+ va_start(ap, format);
+ ret = __ms_vsscanf(str, format, ap);
+ va_end(ap);
+ return ret;
+}
+int __cdecl (*__MINGW_IMP_SYMBOL(__ms_sscanf))(const char * restrict, const
char * restrict, ...) = __ms_sscanf;
diff --git a/mingw-w64-crt/stdio/ucrt/__ms_swscanf.c
b/mingw-w64-crt/stdio/ucrt/__ms_swscanf.c
new file mode 100644
index 000000000000..a969e8294ee8
--- /dev/null
+++ b/mingw-w64-crt/stdio/ucrt/__ms_swscanf.c
@@ -0,0 +1,22 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#undef __MSVCRT_VERSION__
+#define _UCRT
+
+#include <stdio.h>
+#include <stdarg.h>
+
+int __cdecl __ms_swscanf(const wchar_t * restrict str, const wchar_t *
restrict format, ...)
+{
+ va_list ap;
+ int ret;
+ va_start(ap, format);
+ ret = __ms_vswscanf(str, format, ap);
+ va_end(ap);
+ return ret;
+}
+int __cdecl (*__MINGW_IMP_SYMBOL(__ms_swscanf))(const wchar_t * restrict,
const wchar_t * restrict, ...) = __ms_swscanf;
diff --git a/mingw-w64-crt/stdio/ucrt/__ms_vfscanf.c
b/mingw-w64-crt/stdio/ucrt/__ms_vfscanf.c
new file mode 100644
index 000000000000..ba642f69cad7
--- /dev/null
+++ b/mingw-w64-crt/stdio/ucrt/__ms_vfscanf.c
@@ -0,0 +1,17 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#undef __MSVCRT_VERSION__
+#define _UCRT
+
+#include <stdio.h>
+
+int __cdecl __ms_vfscanf(FILE * restrict file, const char * restrict format,
va_list ap)
+{
+ /* __ms_* scanf functions works in legacy msvcrt mode for compatibility with
msvcrt.dll and tchar.h macros */
+ return
__stdio_common_vfscanf(_CRT_INTERNAL_SCANF_LEGACY_MSVCRT_COMPATIBILITY, file,
format, NULL, ap);
+}
+int __cdecl (*__MINGW_IMP_SYMBOL(__ms_vfscanf))(FILE * restrict, const char *
restrict, va_list) = __ms_vfscanf;
diff --git a/mingw-w64-crt/stdio/ucrt/__ms_vfwscanf.c
b/mingw-w64-crt/stdio/ucrt/__ms_vfwscanf.c
new file mode 100644
index 000000000000..56c81588b6ac
--- /dev/null
+++ b/mingw-w64-crt/stdio/ucrt/__ms_vfwscanf.c
@@ -0,0 +1,17 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#undef __MSVCRT_VERSION__
+#define _UCRT
+
+#include <stdio.h>
+
+int __cdecl __ms_vfwscanf(FILE * restrict file, const wchar_t * restrict
format, va_list ap)
+{
+ /* __ms_* scanf functions works in legacy msvcrt mode for compatibility with
msvcrt.dll and tchar.h macros */
+ return
__stdio_common_vfwscanf(_CRT_INTERNAL_SCANF_LEGACY_MSVCRT_COMPATIBILITY |
_CRT_INTERNAL_SCANF_LEGACY_WIDE_SPECIFIERS, file, format, NULL, ap);
+}
+int __cdecl (*__MINGW_IMP_SYMBOL(__ms_vfwscanf))(FILE * restrict, const
wchar_t * restrict, va_list) = __ms_vfwscanf;
diff --git a/mingw-w64-crt/stdio/ucrt/__ms_vscanf.c
b/mingw-w64-crt/stdio/ucrt/__ms_vscanf.c
new file mode 100644
index 000000000000..50c1990df644
--- /dev/null
+++ b/mingw-w64-crt/stdio/ucrt/__ms_vscanf.c
@@ -0,0 +1,16 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#undef __MSVCRT_VERSION__
+#define _UCRT
+
+#include <stdio.h>
+
+int __cdecl __ms_vscanf(const char * restrict format, va_list ap)
+{
+ return __ms_vfscanf(stdin, format, ap);
+}
+int __cdecl (*__MINGW_IMP_SYMBOL(__ms_vscanf))(const char * restrict, va_list)
= __ms_vscanf;
diff --git a/mingw-w64-crt/stdio/ucrt/__ms_vsscanf.c
b/mingw-w64-crt/stdio/ucrt/__ms_vsscanf.c
new file mode 100644
index 000000000000..cca77bbd8221
--- /dev/null
+++ b/mingw-w64-crt/stdio/ucrt/__ms_vsscanf.c
@@ -0,0 +1,17 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#undef __MSVCRT_VERSION__
+#define _UCRT
+
+#include <stdio.h>
+
+int __cdecl __ms_vsscanf(const char * restrict str, const char * restrict
format, va_list ap)
+{
+ /* __ms_* scanf functions works in legacy msvcrt mode for compatibility with
msvcrt.dll and tchar.h macros */
+ return
__stdio_common_vsscanf(_CRT_INTERNAL_SCANF_LEGACY_MSVCRT_COMPATIBILITY, str,
(size_t)-1, format, NULL, ap);
+}
+int __cdecl (*__MINGW_IMP_SYMBOL(__ms_vsscanf))(const char * restrict, const
char * restrict, va_list) = __ms_vsscanf;
diff --git a/mingw-w64-crt/stdio/ucrt/__ms_vswscanf.c
b/mingw-w64-crt/stdio/ucrt/__ms_vswscanf.c
new file mode 100644
index 000000000000..7652cca3fae8
--- /dev/null
+++ b/mingw-w64-crt/stdio/ucrt/__ms_vswscanf.c
@@ -0,0 +1,17 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#undef __MSVCRT_VERSION__
+#define _UCRT
+
+#include <stdio.h>
+
+int __cdecl __ms_vswscanf(const wchar_t * restrict str, const wchar_t *
restrict format, va_list ap)
+{
+ /* __ms_* scanf functions works in legacy msvcrt mode for compatibility with
msvcrt.dll and tchar.h macros */
+ return
__stdio_common_vswscanf(_CRT_INTERNAL_SCANF_LEGACY_MSVCRT_COMPATIBILITY |
_CRT_INTERNAL_SCANF_LEGACY_WIDE_SPECIFIERS, str, (size_t)-1, format, NULL, ap);
+}
+int __cdecl (*__MINGW_IMP_SYMBOL(__ms_vswscanf))(const wchar_t * restrict,
const wchar_t * restrict, va_list) = __ms_vswscanf;
diff --git a/mingw-w64-crt/stdio/ucrt/__ms_vwscanf.c
b/mingw-w64-crt/stdio/ucrt/__ms_vwscanf.c
new file mode 100644
index 000000000000..ee94d74a6739
--- /dev/null
+++ b/mingw-w64-crt/stdio/ucrt/__ms_vwscanf.c
@@ -0,0 +1,16 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#undef __MSVCRT_VERSION__
+#define _UCRT
+
+#include <stdio.h>
+
+int __cdecl __ms_vwscanf(const wchar_t * restrict format, va_list ap)
+{
+ return __ms_vfwscanf(stdin, format, ap);
+}
+int __cdecl (*__MINGW_IMP_SYMBOL(__ms_vwscanf))(const wchar_t * restrict,
va_list) = __ms_vwscanf;
diff --git a/mingw-w64-crt/stdio/ucrt/__ms_wscanf.c
b/mingw-w64-crt/stdio/ucrt/__ms_wscanf.c
new file mode 100644
index 000000000000..de6a26e5abf9
--- /dev/null
+++ b/mingw-w64-crt/stdio/ucrt/__ms_wscanf.c
@@ -0,0 +1,22 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#undef __MSVCRT_VERSION__
+#define _UCRT
+
+#include <stdio.h>
+#include <stdarg.h>
+
+int __cdecl __ms_wscanf(const wchar_t * restrict format, ...)
+{
+ va_list ap;
+ int ret;
+ va_start(ap, format);
+ ret = __ms_vwscanf(format, ap);
+ va_end(ap);
+ return ret;
+}
+int __cdecl (*__MINGW_IMP_SYMBOL(__ms_wscanf))(const wchar_t * restrict, ...)
= __ms_wscanf;
--
2.20.1
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public