|  | #include <locale.h> | 
|  | #include <stdio.h> | 
|  | #include <stdlib.h> | 
|  | #include <string.h> | 
|  | #include <time.h> | 
|  | #include <wchar.h> | 
|  |  | 
|  |  | 
|  | static int | 
|  | do_test (void) | 
|  | { | 
|  | locale_t l; | 
|  | locale_t old; | 
|  | struct tm tm; | 
|  | char buf[1000]; | 
|  | wchar_t wbuf[1000]; | 
|  | int result = 0; | 
|  | size_t n; | 
|  |  | 
|  | l = newlocale (LC_ALL_MASK, "de_DE.ISO-8859-1", NULL); | 
|  | if (l == NULL) | 
|  | { | 
|  | puts ("newlocale failed"); | 
|  | exit (1); | 
|  | } | 
|  |  | 
|  | memset (&tm, '\0', sizeof (tm)); | 
|  |  | 
|  | tm.tm_year = 102; | 
|  | tm.tm_mon = 2; | 
|  | tm.tm_mday = 1; | 
|  |  | 
|  | if (strftime (buf, sizeof (buf), "%e %^B %Y", &tm) == 0) | 
|  | { | 
|  | puts ("initial strftime failed"); | 
|  | exit (1); | 
|  | } | 
|  | if (strcmp (buf, " 1 MARCH 2002") != 0) | 
|  | { | 
|  | printf ("initial strftime: expected \"%s\", got \"%s\"\n", | 
|  | " 1 MARCH 2002", buf); | 
|  | result = 1; | 
|  | } | 
|  | else | 
|  | printf ("got \"%s\"\n", buf); | 
|  |  | 
|  | /* Now using the extended locale model.  */ | 
|  | if (strftime_l (buf, sizeof (buf), "%e %^B %Y", &tm, l) == 0) | 
|  | { | 
|  | puts ("strftime_l failed"); | 
|  | result = 1; | 
|  | } | 
|  | else if (strcmp (buf, " 1 M\xc4RZ 2002") != 0) | 
|  | { | 
|  | printf ("strftime_l: expected \"%s\", got \"%s\"\n", | 
|  | " 1 M\xc4RZ 2002", buf); | 
|  | result = 1; | 
|  | } | 
|  | else | 
|  | { | 
|  | setlocale (LC_ALL, "de_DE.ISO-8859-1"); | 
|  | printf ("got \"%s\"\n", buf); | 
|  | setlocale (LC_ALL, "C"); | 
|  | } | 
|  |  | 
|  | /* And the wide character version.  */ | 
|  | if (wcsftime_l (wbuf, sizeof (wbuf) / sizeof (wbuf[0]), L"%e %^B %Y", &tm, l) | 
|  | == 0) | 
|  | { | 
|  | puts ("wcsftime_l failed"); | 
|  | result = 1; | 
|  | } | 
|  | else if (wcscmp (wbuf, L" 1 M\x00c4RZ 2002") != 0) | 
|  | { | 
|  | printf ("wcsftime_l: expected \"%ls\", got \"%ls\"\n", | 
|  | L" 1 M\x00c4RZ 2002", wbuf); | 
|  | result = 1; | 
|  | } | 
|  | else | 
|  | { | 
|  | setlocale (LC_ALL, "de_DE.ISO-8859-1"); | 
|  | printf ("got \"%ls\"\n", wbuf); | 
|  | setlocale (LC_ALL, "C"); | 
|  | } | 
|  |  | 
|  | old = uselocale (l); | 
|  |  | 
|  | n = strftime (buf, sizeof (buf), "%e %^B %Y", &tm); | 
|  |  | 
|  | /* Switch back.  */ | 
|  | (void) uselocale (old); | 
|  |  | 
|  | if (n == 0) | 
|  | { | 
|  | puts ("strftime after first uselocale failed"); | 
|  | result = 1; | 
|  | } | 
|  | else if (strcmp (buf, " 1 M\xc4RZ 2002") != 0) | 
|  | { | 
|  | printf ("strftime in non-C locale: expected \"%s\", got \"%s\"\n", | 
|  | " 1 M\xc4RZ 2002", buf); | 
|  | result = 1; | 
|  | } | 
|  | else | 
|  | { | 
|  | setlocale (LC_ALL, "de_DE.ISO-8859-1"); | 
|  | printf ("got \"%s\"\n", buf); | 
|  | setlocale (LC_ALL, "C"); | 
|  | } | 
|  |  | 
|  | if (strftime (buf, sizeof (buf), "%e %^B %Y", &tm) == 0) | 
|  | { | 
|  | puts ("strftime after second uselocale failed"); | 
|  | result = 1; | 
|  | } | 
|  | else if (strcmp (buf, " 1 MARCH 2002") != 0) | 
|  | { | 
|  | printf ("initial strftime: expected \"%s\", got \"%s\"\n", | 
|  | " 1 MARCH 2002", buf); | 
|  | result = 1; | 
|  | } | 
|  | else | 
|  | printf ("got \"%s\"\n", buf); | 
|  |  | 
|  | return result; | 
|  | } | 
|  |  | 
|  | #define TEST_FUNCTION do_test () | 
|  | #include "../test-skeleton.c" |