1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21: #include <errno.h>
22: #include <locale.h>
23: #include <stdio.h>
24: #include <string.h>
25: #include <wchar.h>
26:
27:
28: static int
29: do_test (const char *loc)
30: {
31: char buf[100];
32: size_t n;
33: mbstate_t state;
34: const char *nloc;
35: int res;
36:
37: nloc = setlocale (LC_ALL, loc);
38: if (nloc == NULL)
39: {
40: printf ("could not set locale \"%s\"\n", loc);
41: return 1;
42: }
43: printf ("new locale: %s\n", nloc);
44:
45: memset (&state, '\0', sizeof (state));
46: errno = 0;
47: n = wcrtomb (buf, (wchar_t) -15l, &state);
48:
49: printf ("n = %zd, errno = %d (%s)\n", n, errno, strerror (errno));
50:
51: res = n != (size_t) -1 || errno != EILSEQ;
52: if (res)
53: puts ("*** FAIL");
54: putchar ('\n');
55:
56: return res;
57: }
58:
59:
60: int
61: main (void)
62: {
63: int res;
64:
65: res = do_test ("C");
66: res |= do_test ("de_DE.ISO-8859-1");
67: res |= do_test ("de_DE.UTF-8");
68: res |= do_test ("en_US.ANSI_X3.4-1968");
69: res |= do_test ("ja_JP.EUC-JP");
70: res |= do_test ("hr_HR.ISO-8859-2");
71:
72:
73: return res;
74: }