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;