.
[kopensolaris-gnu/glibc.git] / localedata / bug-iconv-trans.c
1 #include <iconv.h>
2 #include <locale.h>
3 #include <stdio.h>
4 #include <string.h>
5
6 int
7 main (void)
8 {
9   iconv_t cd;
10   const char str[] = "ÄäÖöÜüß";
11   const char expected[] = "AEaeOEoeUEuess";
12   char *inptr = (char *) str;
13   size_t inlen = strlen (str) + 1;
14   char outbuf[500];
15   char *outptr = outbuf;
16   size_t outlen = sizeof (outbuf);
17   int result = 0;
18   size_t n;
19
20   if (setlocale (LC_ALL, "de_DE.UTF-8") == NULL)
21     {
22       puts ("setlocale failed");
23       return 1;
24     }
25
26   cd = iconv_open ("ANSI_X3.4-1968//TRANSLIT", "ISO-8859-1");
27   if (cd == (iconv_t) -1)
28     {
29       puts ("iconv_open failed");
30       return 1;
31     }
32
33   n = iconv (cd, &inptr, &inlen, &outptr, &outlen);
34   if (n != 7)
35     {
36       if (n == (size_t) -1)
37         printf ("iconv() returned error: %m\n");
38       else
39         printf ("iconv() returned %Zd, expected 7\n", n);
40       result = 1;
41     }
42   if (inlen != 0)
43     {
44       puts ("not all input consumed");
45       result = 1;
46     }
47   else if (inptr - str != strlen (str) + 1)
48     {
49       printf ("inptr wrong, advanced by %td\n", inptr - str);
50       result = 1;
51     }
52   if (memcmp (outbuf, expected, sizeof (expected)) != 0)
53     {
54       printf ("result wrong: \"%.*s\", expected: \"%s\"\n",
55               (int) (sizeof (outbuf) - outlen), outbuf, expected);
56       result = 1;
57     }
58   else if (outlen != sizeof (outbuf) - sizeof (expected))
59     {
60       printf ("outlen wrong: %Zd, expected %Zd\n", outlen,
61               sizeof (outbuf) - 15);
62       result = 1;
63     }
64   else
65     printf ("output is \"%s\" which is OK\n", outbuf);
66
67   return result;
68 }