OSDN Git Service

* getlocale.c (main): Use setlocale and fetch string from Windows
authorcorinna <corinna>
Mon, 25 Jan 2010 09:22:12 +0000 (09:22 +0000)
committercorinna <corinna>
Mon, 25 Jan 2010 09:22:12 +0000 (09:22 +0000)
using GetLocaleInfoW.  Explain why.

winsup/utils/ChangeLog
winsup/utils/getlocale.c

index 8d677e6..83318f3 100644 (file)
@@ -1,3 +1,8 @@
+2010-01-25  Corinna Vinschen  <corinna@vinschen.de>
+
+       * getlocale.c (main): Use setlocale and fetch string from Windows
+       using GetLocaleInfoW.  Explain why.
+
 2010-01-22  Corinna Vinschen  <corinna@vinschen.de>
 
        * Makefile.in (CYGWIN_BINS): Add getlocale.
index 3a60126..024dee7 100644 (file)
@@ -26,6 +26,7 @@
 #include <stdio.h>
 #include <getopt.h>
 #include <string.h>
+#include <locale.h>
 #define WINVER 0x0601
 #include <windows.h>
 
@@ -83,6 +84,7 @@ int main (int argc, char **argv)
   const char *utf = "";
   char name[32];
 
+  setlocale (LC_ALL, "");
   while ((opt = getopt_long (argc, argv, opts, longopts, NULL)) != EOF)
     switch (opt)
       {
@@ -112,13 +114,15 @@ int main (int argc, char **argv)
            lcid = (sublang << 10) | lang;
            if (getlocale (lcid, name))
              {
-               char lang[256];
-               char country[256];
+               wchar_t lang[256];
+               wchar_t country[256];
                char loc[32];
-               GetLocaleInfo (lcid, LOCALE_SENGLANGUAGE, lang, 256);
-               GetLocaleInfo (lcid, LOCALE_SENGCOUNTRY, country, 256);
+               /* Go figure.  Even the English name of a language or
+                  locale might contain native characters. */
+               GetLocaleInfoW (lcid, LOCALE_SENGLANGUAGE, lang, 256);
+               GetLocaleInfoW (lcid, LOCALE_SENGCOUNTRY, country, 256);
                stpcpy (stpcpy (loc, name), utf);
-               printf ("%-16s %s (%s)\n", loc, lang, country);
+               printf ("%-16s %ls (%ls)\n", loc, lang, country);
              }
          }
       return 0;