X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=tests%2Ftest-mbsrtowcs.c;h=81e67c1c87cf6b1491890b876edc40931f58a739;hb=2b08e890726e2c572d2ba64f19bece957d1bfd98;hp=311fa0859938b2838e16e58cdd7e12e13aae427e;hpb=dca7c61846780f4af95c531cd069b002cb31c0a5;p=gnulib.git diff --git a/tests/test-mbsrtowcs.c b/tests/test-mbsrtowcs.c index 311fa0859..81e67c1c8 100644 --- a/tests/test-mbsrtowcs.c +++ b/tests/test-mbsrtowcs.c @@ -64,14 +64,14 @@ main (int argc, char *argv[]) ASSERT (ret == 0); ASSERT (mbsinit (&state)); - wc = 0xBADFACE; + wc = (wchar_t) 0xBADFACE; src = ""; ret = mbsrtowcs (&wc, &src, 0, &state); ASSERT (ret == 0); ASSERT (wc == (wchar_t) 0xBADFACE); ASSERT (mbsinit (&state)); - wc = 0xBADFACE; + wc = (wchar_t) 0xBADFACE; src = ""; ret = mbsrtowcs (&wc, &src, 1, &state); ASSERT (ret == 0); @@ -88,11 +88,12 @@ main (int argc, char *argv[]) #define BUFSIZE 10 wchar_t buf[BUFSIZE]; const char *src; + mbstate_t temp_state; { size_t i; for (i = 0; i < BUFSIZE; i++) - buf[i] = 0xBADFACE; + buf[i] = (wchar_t) 0xBADFACE; } switch (argv[1][0]) @@ -103,14 +104,14 @@ main (int argc, char *argv[]) char input[] = "B\374\337er"; /* "Büßer" */ memset (&state, '\0', sizeof (mbstate_t)); - wc = 0xBADFACE; + wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'B'); ASSERT (mbsinit (&state)); input[0] = '\0'; - wc = 0xBADFACE; + wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 1, 1, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == (unsigned char) '\374'); @@ -118,7 +119,8 @@ main (int argc, char *argv[]) input[1] = '\0'; src = input + 2; - ret = mbsrtowcs (NULL, &src, unlimited ? BUFSIZE : 1, &state); + temp_state = state; + ret = mbsrtowcs (NULL, &src, unlimited ? BUFSIZE : 1, &temp_state); ASSERT (ret == 3); ASSERT (src == input + 2); ASSERT (mbsinit (&state)); @@ -139,7 +141,7 @@ main (int argc, char *argv[]) ASSERT (buf[1] == (wchar_t) 0xBADFACE); ASSERT (mbsinit (&state)); } - return 0; + break; case '2': /* Locale encoding is UTF-8. */ @@ -147,14 +149,14 @@ main (int argc, char *argv[]) char input[] = "B\303\274\303\237er"; /* "Büßer" */ memset (&state, '\0', sizeof (mbstate_t)); - wc = 0xBADFACE; + wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'B'); ASSERT (mbsinit (&state)); input[0] = '\0'; - wc = 0xBADFACE; + wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 1, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (wc == (wchar_t) 0xBADFACE); @@ -162,7 +164,8 @@ main (int argc, char *argv[]) input[1] = '\0'; src = input + 2; - ret = mbsrtowcs (NULL, &src, unlimited ? BUFSIZE : 2, &state); + temp_state = state; + ret = mbsrtowcs (NULL, &src, unlimited ? BUFSIZE : 2, &temp_state); ASSERT (ret == 4); ASSERT (src == input + 2); ASSERT (!mbsinit (&state)); @@ -184,52 +187,60 @@ main (int argc, char *argv[]) ASSERT (buf[2] == (wchar_t) 0xBADFACE); ASSERT (mbsinit (&state)); } - return 0; + break; case '3': /* Locale encoding is EUC-JP. */ { - char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ + char input[] = "<\306\374\313\334\270\354>"; /* "<日本語>" */ memset (&state, '\0', sizeof (mbstate_t)); - wc = 0xBADFACE; + wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == 1); - ASSERT (wc == 'B'); + ASSERT (wc == '<'); ASSERT (mbsinit (&state)); input[0] = '\0'; - wc = 0xBADFACE; - ret = mbrtowc (&wc, input + 1, 1, &state); + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 1, 2, &state); + ASSERT (ret == 2); + ASSERT (wctob (wc) == EOF); + ASSERT (mbsinit (&state)); + input[1] = '\0'; + input[2] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 3, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (wc == (wchar_t) 0xBADFACE); ASSERT (!mbsinit (&state)); - input[1] = '\0'; + input[3] = '\0'; - src = input + 2; - ret = mbsrtowcs (NULL, &src, unlimited ? BUFSIZE : 2, &state); - ASSERT (ret == 4); - ASSERT (src == input + 2); + src = input + 4; + temp_state = state; + ret = mbsrtowcs (NULL, &src, unlimited ? BUFSIZE : 2, &temp_state); + ASSERT (ret == 3); + ASSERT (src == input + 4); ASSERT (!mbsinit (&state)); - src = input + 2; + src = input + 4; ret = mbsrtowcs (buf, &src, unlimited ? BUFSIZE : 2, &state); - ASSERT (ret == (unlimited ? 4 : 2)); + ASSERT (ret == (unlimited ? 3 : 2)); ASSERT (src == (unlimited ? NULL : input + 7)); ASSERT (wctob (buf[0]) == EOF); ASSERT (wctob (buf[1]) == EOF); if (unlimited) { - ASSERT (buf[2] == 'e'); - ASSERT (buf[3] == 'r'); - ASSERT (buf[4] == 0); - ASSERT (buf[5] == (wchar_t) 0xBADFACE); + ASSERT (buf[2] == '>'); + ASSERT (buf[3] == 0); + ASSERT (buf[4] == (wchar_t) 0xBADFACE); } else ASSERT (buf[2] == (wchar_t) 0xBADFACE); ASSERT (mbsinit (&state)); } - return 0; + break; case '4': /* Locale encoding is GB18030. */ @@ -237,14 +248,14 @@ main (int argc, char *argv[]) char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ memset (&state, '\0', sizeof (mbstate_t)); - wc = 0xBADFACE; + wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'B'); ASSERT (mbsinit (&state)); input[0] = '\0'; - wc = 0xBADFACE; + wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 1, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (wc == (wchar_t) 0xBADFACE); @@ -252,7 +263,8 @@ main (int argc, char *argv[]) input[1] = '\0'; src = input + 2; - ret = mbsrtowcs (NULL, &src, unlimited ? BUFSIZE : 2, &state); + temp_state = state; + ret = mbsrtowcs (NULL, &src, unlimited ? BUFSIZE : 2, &temp_state); ASSERT (ret == 4); ASSERT (src == input + 2); ASSERT (!mbsinit (&state)); @@ -274,7 +286,7 @@ main (int argc, char *argv[]) ASSERT (buf[2] == (wchar_t) 0xBADFACE); ASSERT (mbsinit (&state)); } - return 0; + break; default: return 1;