2007-07-24 Roland McGrath <roland@redhat.com>
[kopensolaris-gnu/glibc.git] / iconv / tst-iconv2.c
1 /* Copyright (C) 2001 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3    Contributed by Ulrich Drepper <drepper@cygnus.com>, 2001.
4
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, write to the Free
17    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
18    02111-1307 USA.  */
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 }