From ca2b906d557f7313ba10cf07738d81d75e8b3b8c Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Mon, 25 Jan 2010 09:22:12 +0000 Subject: [PATCH] * getlocale.c (main): Use setlocale and fetch string from Windows using GetLocaleInfoW. Explain why. --- winsup/utils/ChangeLog | 5 +++++ winsup/utils/getlocale.c | 14 +++++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/winsup/utils/ChangeLog b/winsup/utils/ChangeLog index 8d677e6fd..83318f3da 100644 --- a/winsup/utils/ChangeLog +++ b/winsup/utils/ChangeLog @@ -1,3 +1,8 @@ +2010-01-25 Corinna Vinschen + + * getlocale.c (main): Use setlocale and fetch string from Windows + using GetLocaleInfoW. Explain why. + 2010-01-22 Corinna Vinschen * Makefile.in (CYGWIN_BINS): Add getlocale. diff --git a/winsup/utils/getlocale.c b/winsup/utils/getlocale.c index 3a601269f..024dee762 100644 --- a/winsup/utils/getlocale.c +++ b/winsup/utils/getlocale.c @@ -26,6 +26,7 @@ #include #include #include +#include #define WINVER 0x0601 #include @@ -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;