This is test for MS-specific _stprintf() function. All test variants passes also when compiled with MSVC compiler and run under msvcrt or UCRT runtime.
Note that gcc throws sprintf format warning for %hs usage in this test. It is because gcc thinks that %hs takes unsigned short* argument. But this is incorrect expectation, as all msvcrt and UCRT runtime versions expect char* argument for %hs format. So this gcc format warning for %hs is a gcc's bug. --- mingw-w64-crt/Makefile.am | 6 ++++ mingw-w64-crt/testcases/t_stprintf0_a.c | 3 ++ mingw-w64-crt/testcases/t_stprintf0_u.c | 3 ++ mingw-w64-crt/testcases/t_stprintf1_a.c | 3 ++ mingw-w64-crt/testcases/t_stprintf1_u.c | 3 ++ mingw-w64-crt/testcases/t_stprintf_a.c | 2 ++ mingw-w64-crt/testcases/t_stprintf_tmpl.h | 34 +++++++++++++++++++++++ mingw-w64-crt/testcases/t_stprintf_u.c | 2 ++ 8 files changed, 56 insertions(+) create mode 100644 mingw-w64-crt/testcases/t_stprintf0_a.c create mode 100644 mingw-w64-crt/testcases/t_stprintf0_u.c create mode 100644 mingw-w64-crt/testcases/t_stprintf1_a.c create mode 100644 mingw-w64-crt/testcases/t_stprintf1_u.c create mode 100644 mingw-w64-crt/testcases/t_stprintf_a.c create mode 100644 mingw-w64-crt/testcases/t_stprintf_tmpl.h create mode 100644 mingw-w64-crt/testcases/t_stprintf_u.c diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am index b80e80d96a01..2b503ff190d5 100644 --- a/mingw-w64-crt/Makefile.am +++ b/mingw-w64-crt/Makefile.am @@ -4199,6 +4199,12 @@ testcase_progs = \ testcases/t_snwprintf \ testcases/t_snwprintf0 \ testcases/t_snwprintf1 \ + testcases/t_stprintf_a \ + testcases/t_stprintf_u \ + testcases/t_stprintf0_a \ + testcases/t_stprintf0_u \ + testcases/t_stprintf1_a \ + testcases/t_stprintf1_u \ testcases/t_setjmp \ testcases/t_sigv \ testcases/t_speed_powl \ diff --git a/mingw-w64-crt/testcases/t_stprintf0_a.c b/mingw-w64-crt/testcases/t_stprintf0_a.c new file mode 100644 index 000000000000..be532590d18e --- /dev/null +++ b/mingw-w64-crt/testcases/t_stprintf0_a.c @@ -0,0 +1,3 @@ +#define __USE_MINGW_ANSI_STDIO 0 +#undef _UNICODE +#include "t_stprintf_tmpl.h" diff --git a/mingw-w64-crt/testcases/t_stprintf0_u.c b/mingw-w64-crt/testcases/t_stprintf0_u.c new file mode 100644 index 000000000000..bf02c32981cf --- /dev/null +++ b/mingw-w64-crt/testcases/t_stprintf0_u.c @@ -0,0 +1,3 @@ +#define __USE_MINGW_ANSI_STDIO 0 +#define _UNICODE +#include "t_stprintf_tmpl.h" diff --git a/mingw-w64-crt/testcases/t_stprintf1_a.c b/mingw-w64-crt/testcases/t_stprintf1_a.c new file mode 100644 index 000000000000..e7109aae6281 --- /dev/null +++ b/mingw-w64-crt/testcases/t_stprintf1_a.c @@ -0,0 +1,3 @@ +#define __USE_MINGW_ANSI_STDIO 1 +#undef _UNICODE +#include "t_stprintf_tmpl.h" diff --git a/mingw-w64-crt/testcases/t_stprintf1_u.c b/mingw-w64-crt/testcases/t_stprintf1_u.c new file mode 100644 index 000000000000..890c0d5fd2f9 --- /dev/null +++ b/mingw-w64-crt/testcases/t_stprintf1_u.c @@ -0,0 +1,3 @@ +#define __USE_MINGW_ANSI_STDIO 1 +#define _UNICODE +#include "t_stprintf_tmpl.h" diff --git a/mingw-w64-crt/testcases/t_stprintf_a.c b/mingw-w64-crt/testcases/t_stprintf_a.c new file mode 100644 index 000000000000..af64991ce411 --- /dev/null +++ b/mingw-w64-crt/testcases/t_stprintf_a.c @@ -0,0 +1,2 @@ +#undef _UNICODE +#include "t_stprintf_tmpl.h" diff --git a/mingw-w64-crt/testcases/t_stprintf_tmpl.h b/mingw-w64-crt/testcases/t_stprintf_tmpl.h new file mode 100644 index 000000000000..a3d54a631e68 --- /dev/null +++ b/mingw-w64-crt/testcases/t_stprintf_tmpl.h @@ -0,0 +1,34 @@ +#include <stdio.h> +#include <string.h> +#include <wchar.h> +#include <tchar.h> + +int main() { + int i; + TCHAR buffer[10] = { _T('X'), _T('X'), _T('X'), _T('X'), _T('X'), _T('X'), _T('X'), _T('X'), _T('X'), _T('X') }; +#ifdef _UNICODE + int exp_sizeof_buffer = 2*10; +#else + int exp_sizeof_buffer = 10; +#endif + /* _stprintf format: + * %s takes _T string + * %hs takes char* string + * %ls takes wchar_t* string + */ + int ret = _stprintf(buffer, _T("%sBB%hs%ls"), _T("AA"), "CC", L"DD"); + if (sizeof(buffer) != exp_sizeof_buffer) { + fprintf(stderr, "sizeof(buffer): expected=%d got=%d\n", exp_sizeof_buffer, (int)sizeof(buffer)); + return 1; + } + if (ret != 8 || memcmp(buffer, _T("AABBCCDD\0X"), sizeof(buffer)) != 0) { + fprintf(stderr, "ret: expected=8 got=%d\n", ret); + fprintf(stderr, "buffer:"); + for (i = 0; i < 10; i++) { + fprintf(stderr, " 0x%02x", (int)buffer[i]); + } + fprintf(stderr, "\n"); + return 1; + } + return 0; +} diff --git a/mingw-w64-crt/testcases/t_stprintf_u.c b/mingw-w64-crt/testcases/t_stprintf_u.c new file mode 100644 index 000000000000..4918e66734e1 --- /dev/null +++ b/mingw-w64-crt/testcases/t_stprintf_u.c @@ -0,0 +1,2 @@ +#define _UNICODE +#include "t_stprintf_tmpl.h" -- 2.20.1 _______________________________________________ Mingw-w64-public mailing list Mingw-w64-public@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mingw-w64-public