1 /* Test for invalid input to wcrtomb.
2    Copyright (C) 2001 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4    Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
5 
6    The GNU C Library is free software; you can redistribute it and/or
7    modify it under the terms of the GNU Lesser General Public
8    License as published by the Free Software Foundation; either
9    version 2.1 of the License, or (at your option) any later version.
10 
11    The GNU C Library is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14    Lesser General Public License for more details.
15 
16    You should have received a copy of the GNU Lesser General Public
17    License along with the GNU C Library; if not, see
18    <http://www.gnu.org/licenses/>.  */
19 
20 #include <errno.h>
21 #include <locale.h>
22 #include <stdio.h>
23 #include <string.h>
24 #include <wchar.h>
25 
26 
27 static int
do_test(const char * loc)28 do_test (const char *loc)
29 {
30   char buf[100];
31   size_t n;
32   mbstate_t state;
33   const char *nloc;
34   int res;
35 
36   nloc = setlocale (LC_ALL, loc);
37   if (nloc == NULL)
38     {
39       printf ("could not set locale \"%s\"\n", loc);
40       return 1;
41     }
42   printf ("new locale: %s\n", nloc);
43 
44   memset (&state, '\0', sizeof (state));
45   errno = 0;
46   n = wcrtomb (buf, (wchar_t) -15l, &state);
47 
48   printf ("n = %zd, errno = %d (%s)\n", n, errno, strerror (errno));
49 
50   res = n != (size_t) -1 || errno != EILSEQ;
51   if (res)
52     puts ("*** FAIL");
53   putchar ('\n');
54 
55   return res;
56 }
57 
58 
59 int
main(void)60 main (void)
61 {
62   int res;
63 
64   res = do_test ("C");
65   res |= do_test ("de_DE.ISO-8859-1");
66   res |= do_test ("de_DE.UTF-8");
67   res |= do_test ("en_US.ISO-8859-1");
68   res |= do_test ("ja_JP.UTF-8");
69   res |= do_test ("hr_HR.ISO-8859-2");
70   //res |= do_test ("ru_RU.KOI8-R");
71 
72   return res;
73 }
74