1 #include <locale.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <string.h>
5 #include <time.h>
6 #include <wchar.h>
7 
8 
9 static int
do_test(void)10 do_test (void)
11 {
12   locale_t l;
13   locale_t old;
14   struct tm tm;
15   char buf[1000];
16   wchar_t wbuf[1000];
17   int result = 0;
18   size_t n;
19 
20   l = newlocale (LC_ALL_MASK, "de_DE.ISO-8859-1", NULL);
21   if (l == NULL)
22     {
23       puts ("newlocale failed");
24       exit (1);
25     }
26 
27   memset (&tm, '\0', sizeof (tm));
28 
29   tm.tm_year = 102;
30   tm.tm_mon = 2;
31   tm.tm_mday = 1;
32 
33   if (strftime (buf, sizeof (buf), "%e %^B %Y", &tm) == 0)
34     {
35       puts ("initial strftime failed");
36       exit (1);
37     }
38   if (strcmp (buf, " 1 MARCH 2002") != 0)
39     {
40       printf ("initial strftime: expected \"%s\", got \"%s\"\n",
41 	      " 1 MARCH 2002", buf);
42       result = 1;
43     }
44   else
45     printf ("got \"%s\"\n", buf);
46 
47   /* Now using the extended locale model.  */
48   if (strftime_l (buf, sizeof (buf), "%e %^B %Y", &tm, l) == 0)
49     {
50       puts ("strftime_l failed");
51       result = 1;
52     }
53   else if (strcmp (buf, " 1 M\xc4RZ 2002") != 0)
54     {
55       printf ("strftime_l: expected \"%s\", got \"%s\"\n",
56 	      " 1 M\xc4RZ 2002", buf);
57       result = 1;
58     }
59   else
60     {
61       setlocale (LC_ALL, "de_DE.ISO-8859-1");
62       printf ("got \"%s\"\n", buf);
63       setlocale (LC_ALL, "C");
64     }
65 
66   /* And the wide character version.  */
67   if (wcsftime_l (wbuf, sizeof (wbuf) / sizeof (wbuf[0]), L"%e %^B %Y", &tm, l)
68       == 0)
69     {
70       puts ("wcsftime_l failed");
71       result = 1;
72     }
73   else if (wcscmp (wbuf, L" 1 M\x00c4RZ 2002") != 0)
74     {
75       printf ("wcsftime_l: expected \"%ls\", got \"%ls\"\n",
76 	      L" 1 M\x00c4RZ 2002", wbuf);
77       result = 1;
78     }
79   else
80     {
81       setlocale (LC_ALL, "de_DE.ISO-8859-1");
82       printf ("got \"%ls\"\n", wbuf);
83       setlocale (LC_ALL, "C");
84     }
85 
86   old = uselocale (l);
87 
88   n = strftime (buf, sizeof (buf), "%e %^B %Y", &tm);
89 
90   /* Switch back.  */
91   (void) uselocale (old);
92 
93   if (n == 0)
94     {
95       puts ("strftime after first uselocale failed");
96       result = 1;
97     }
98   else if (strcmp (buf, " 1 M\xc4RZ 2002") != 0)
99     {
100       printf ("strftime in non-C locale: expected \"%s\", got \"%s\"\n",
101 	      " 1 M\xc4RZ 2002", buf);
102       result = 1;
103     }
104   else
105     {
106       setlocale (LC_ALL, "de_DE.ISO-8859-1");
107       printf ("got \"%s\"\n", buf);
108       setlocale (LC_ALL, "C");
109     }
110 
111   if (strftime (buf, sizeof (buf), "%e %^B %Y", &tm) == 0)
112     {
113       puts ("strftime after second uselocale failed");
114       result = 1;
115     }
116   else if (strcmp (buf, " 1 MARCH 2002") != 0)
117     {
118       printf ("initial strftime: expected \"%s\", got \"%s\"\n",
119 	      " 1 MARCH 2002", buf);
120       result = 1;
121     }
122   else
123     printf ("got \"%s\"\n", buf);
124 
125   return result;
126 }
127 
128 #define TEST_FUNCTION do_test ()
129 #include "../test-skeleton.c"
130