Ensure that all these MS specific _*t* macros always expands to MS variant of scanf and printf functions independently of __USE_MINGW_ANSI_STDIO.
Majority of the _*t* macros expands to MS specific variants of stdio functions which are not provided by mingw when __USE_MINGW_ANSI_STDIO=1. But some few are, e.g. _tscanf which currently expands to scanf or wscanf. And this can cause that _tscanf behaves differently than _tscanf_l (which does not have __USE_MINGW_ANSI_STDIO=1 replacement. Another example is %s in _stprintf() macro. MS variant of wide-printf treats %s as wchar_*t, but C95+ mandates that %s is always char*. _stprintf() is suppose to be called as: _stprintf(buffer, _T("%s"), _T("string")); And wide variant would work correctly only in the case %s takes wchar_t*. With this change behavior of all _*t* macros would be same and expands always only to MS function, which also ensures compatibility of %s with arguments passed to _*t* macros. --- mingw-w64-headers/crt/tchar.h | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/mingw-w64-headers/crt/tchar.h b/mingw-w64-headers/crt/tchar.h index 3069d7139da4..e8ad587ff8bb 100644 --- a/mingw-w64-headers/crt/tchar.h +++ b/mingw-w64-headers/crt/tchar.h @@ -133,7 +133,7 @@ extern "C" { #define _tenviron _wenviron #define __targv __wargv -#define _tprintf wprintf +#define _tprintf __ms_wprintf #define _tprintf_l _wprintf_l #define _tprintf_p _wprintf_p #define _tprintf_p_l _wprintf_p_l @@ -145,7 +145,7 @@ extern "C" { #define _vtcprintf_l _vcwprintf_l #define _vtcprintf_p _vcwprintf_p #define _vtcprintf_p_l _vcwprintf_p_l -#define _ftprintf fwprintf +#define _ftprintf __ms_fwprintf #define _ftprintf_l _fwprintf_l #define _ftprintf_p _fwprintf_p #define _ftprintf_p_l _fwprintf_p_l @@ -159,11 +159,11 @@ extern "C" { #define _sctprintf_p_l _scwprintf_p_l #define _sntprintf _snwprintf #define _sntprintf_l _snwprintf_l -#define _vtprintf vwprintf +#define _vtprintf __ms_vwprintf #define _vtprintf_l _vwprintf_l #define _vtprintf_p _vwprintf_p #define _vtprintf_p_l _vwprintf_p_l -#define _vftprintf vfwprintf +#define _vftprintf __ms_vfwprintf #define _vftprintf_l _vfwprintf_l #define _vftprintf_p _vfwprintf_p #define _vftprintf_p_l _vfwprintf_p_l @@ -178,13 +178,13 @@ extern "C" { #define _vsntprintf _vsnwprintf #define _vsntprintf_l _vsnwprintf_l -#define _tscanf wscanf +#define _tscanf __ms_wscanf #define _tscanf_l _wscanf_l #define _tcscanf _cwscanf #define _tcscanf_l _cwscanf_l -#define _ftscanf fwscanf +#define _ftscanf __ms_fwscanf #define _ftscanf_l _fwscanf_l -#define _stscanf swscanf +#define _stscanf __ms_swscanf #define _stscanf_l _swscanf_l #define _sntscanf _snwscanf #define _sntscanf_l _snwscanf_l @@ -520,7 +520,7 @@ extern "C" { #endif #define __targv __argv -#define _tprintf printf +#define _tprintf __ms_printf #define _tprintf_l _printf_l #define _tprintf_p _printf_p #define _tprintf_p_l _printf_p_l @@ -532,11 +532,11 @@ extern "C" { #define _vtcprintf_l _vcprintf_l #define _vtcprintf_p _vcprintf_p #define _vtcprintf_p_l _vcprintf_p_l -#define _ftprintf fprintf +#define _ftprintf __ms_fprintf #define _ftprintf_l _fprintf_l #define _ftprintf_p _fprintf_p #define _ftprintf_p_l _fprintf_p_l -#define _stprintf sprintf +#define _stprintf __ms_sprintf #define _stprintf_l _sprintf_l #define _stprintf_p _sprintf_p #define _stprintf_p_l _sprintf_p_l @@ -546,15 +546,15 @@ extern "C" { #define _sctprintf_p_l _scprintf_p_l #define _sntprintf _snprintf #define _sntprintf_l _snprintf_l -#define _vtprintf vprintf +#define _vtprintf __ms_vprintf #define _vtprintf_l _vprintf_l #define _vtprintf_p _vprintf_p #define _vtprintf_p_l _vprintf_p_l -#define _vftprintf vfprintf +#define _vftprintf __ms_vfprintf #define _vftprintf_l _vfprintf_l #define _vftprintf_p _vfprintf_p #define _vftprintf_p_l _vfprintf_p_l -#define _vstprintf vsprintf +#define _vstprintf __ms_vsprintf #define _vstprintf_l _vsprintf_l #define _vstprintf_p _vsprintf_p #define _vstprintf_p_l _vsprintf_p_l @@ -565,13 +565,13 @@ extern "C" { #define _vsntprintf _vsnprintf #define _vsntprintf_l _vsnprintf_l -#define _tscanf scanf +#define _tscanf __ms_scanf #define _tscanf_l _scanf_l #define _tcscanf _cscanf #define _tcscanf_l _cscanf_l -#define _ftscanf fscanf +#define _ftscanf __ms_fscanf #define _ftscanf_l _fscanf_l -#define _stscanf sscanf +#define _stscanf __ms_sscanf #define _stscanf_l _sscanf_l #define _sntscanf _snscanf #define _sntscanf_l _snscanf_l -- 2.20.1 _______________________________________________ Mingw-w64-public mailing list Mingw-w64-public@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mingw-w64-public