| #include <locale.h> |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| #include <time.h> |
| #include <wchar.h> |
| |
| |
| int |
| main (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; |
| } |