crt: fix compilation of tests for mbrlen, mbrtowc and wcrtomb funtions Compilation of tests for mbrlen, mbrtowc and wcrtomb fails with UCRT. UCRT's mbstate_t is a structure and cannot be directly assigned a value. To fix this, define a function to set mbstate_t's conversion state. Signed-off-by: Kirill Makurin <maiddaisuki@outlook.com> Signed-off-by: LIU Hao <lh_mouse@126.com>
diff --git a/mingw-w64-crt/testcases/t_mbrlen.c b/mingw-w64-crt/testcases/t_mbrlen.c index 0cf6b18..4d297e3 100644 --- a/mingw-w64-crt/testcases/t_mbrlen.c +++ b/mingw-w64-crt/testcases/t_mbrlen.c
@@ -9,6 +9,14 @@ #include <stdlib.h> #include <wchar.h> +static void set_conversion_state (mbstate_t *state, int bytes) { +#ifdef _UCRT + state->_Wchar = bytes; +#else + *state = bytes; +#endif +} + char Ascii[] = {'a'}; char NonAscii[] = {(char) 0x80}; char Multibyte[] = {(char) 0x81, (char) 0x81}; @@ -45,7 +53,7 @@ * NOTE: this is optional error condition specified in POSIX. * This check fails with CRT's mbrlen. */ - state = Ascii[0]; + set_conversion_state (&state, Ascii[0]); assert (mbrlen ((char *) &Ascii, MB_CUR_MAX, &state) == (size_t) -1); assert (!mbsinit (&state));
diff --git a/mingw-w64-crt/testcases/t_mbrtowc.c b/mingw-w64-crt/testcases/t_mbrtowc.c index fd2fcb7..1b94207 100644 --- a/mingw-w64-crt/testcases/t_mbrtowc.c +++ b/mingw-w64-crt/testcases/t_mbrtowc.c
@@ -9,6 +9,14 @@ #include <stdlib.h> #include <wchar.h> +static void set_conversion_state (mbstate_t *state, int bytes) { +#ifdef _UCRT + state->_Wchar = bytes; +#else + *state = bytes; +#endif +} + char Ascii[] = {'a'}; char NonAscii[] = {(char) 0x80}; char Multibyte[] = {(char) 0x81, (char) 0x81}; @@ -47,7 +55,7 @@ * NOTE: this is optional error condition specified in POSIX. * This check fails with CRT's mbrtowc. */ - state = Ascii[0]; + set_conversion_state (&state, Ascii[0]); wc = WEOF; assert (mbrtowc (&wc, (char *) &Ascii, MB_CUR_MAX, &state) == (size_t) -1);
diff --git a/mingw-w64-crt/testcases/t_wcrtomb.c b/mingw-w64-crt/testcases/t_wcrtomb.c index 76d8ca0..f6e44f4 100644 --- a/mingw-w64-crt/testcases/t_wcrtomb.c +++ b/mingw-w64-crt/testcases/t_wcrtomb.c
@@ -12,6 +12,14 @@ #define WIN32_LEAN_AND_MEAN #include <windows.h> +static void set_conversion_state (mbstate_t *state, int bytes) { +#ifdef _UCRT + state->_Wchar = bytes; +#else + *state = bytes; +#endif +} + int main (void) { #if __MSVCRT_VERSION__ >= 0x0800 return 77; @@ -42,7 +50,7 @@ * NOTE: this is optional error condition specified in POSIX. * This check fails with CRT's wcrtomb. */ - state = 1; + set_conversion_state (&state, 1); if (1) { char c = EOF;