mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-10-31 22:10:34 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			127 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #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;
 | |
| }
 |