1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20: #include <errno.h>
21: #include <iconv.h>
22: #include <mcheck.h>
23: #include <stddef.h>
24: #include <stdio.h>
25: #include <stdlib.h>
26: #include <string.h>
27:
28:
29: int
30: main (void)
31: {
32: char buf[3];
33: const wchar_t wc[1] = L"a";
34: iconv_t cd;
35: char *inptr;
36: size_t inlen;
37: char *outptr;
38: size_t outlen;
39: size_t n;
40: int e;
41: int result = 0;
42:
43: mtrace ();
44:
45: cd = iconv_open ("UCS4", "WCHAR_T");
46: if (cd == (iconv_t) -1)
47: {
48: printf ("cannot convert from wchar_t to UCS4: %m\n");
49: exit (1);
50: }
51:
52: inptr = (char *) wc;
53: inlen = sizeof (wchar_t);
54: outptr = buf;
55: outlen = 3;
56:
57: n = iconv (cd, &inptr, &inlen, &outptr, &outlen);
58: e = errno;
59:
60: if (n != (size_t) -1)
61: {
62: printf ("incorrect iconv() return value: %zd, expected -1\n", n);
63: result = 1;
64: }
65:
66: if (e != E2BIG)
67: {
68: printf ("incorrect error value: %s, expected %s\n",
69: strerror (e), strerror (E2BIG));
70: result = 1;
71: }
72:
73: if (inptr != (char *) wc)
74: {
75: puts ("inptr changed");
76: result = 1;
77: }
78:
79: if (inlen != sizeof (wchar_t))
80: {
81: puts ("inlen changed");
82: result = 1;
83: }
84:
85: if (outptr != buf)
86: {
87: puts ("outptr changed");
88: result = 1;
89: }
90:
91: if (outlen != 3)
92: {
93: puts ("outlen changed");
94: result = 1;
95: }
96:
97: iconv_close (cd);
98:
99: return result;
100: }