From 981bc45bdcbff9295df492770e8dde6611fc98b7 Mon Sep 17 00:00:00 2001 From: corinna Date: Wed, 10 Feb 2010 12:29:25 +0000 Subject: [PATCH] * nlsfuncs.cc (__set_charset_from_locale): Allow "@euro" modifier only for locales which use EUR as currency. --- winsup/cygwin/ChangeLog | 5 +++++ winsup/cygwin/nlsfuncs.cc | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index dbede5c0d3..3221fd1e2c 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,5 +1,10 @@ 2010-02-10 Corinna Vinschen + * nlsfuncs.cc (__set_charset_from_locale): Allow "@euro" modifier only + for locales which use EUR as currency. + +2010-02-10 Corinna Vinschen + * nlsfuncs.cc (__get_lcid_from_locale): Convert iu_CA to iu-Latn-CA rather than iu-Cans-CA on Vista and later. (__set_charset_from_locale): Set default charset for iu_CA to UTF-8. diff --git a/winsup/cygwin/nlsfuncs.cc b/winsup/cygwin/nlsfuncs.cc index c351c9de16..5fa767b845 100644 --- a/winsup/cygwin/nlsfuncs.cc +++ b/winsup/cygwin/nlsfuncs.cc @@ -879,6 +879,7 @@ __set_charset_from_locale (const char *locale, char *charset) { UINT cp; LCID lcid = __get_lcid_from_locale (locale); + wchar_t wbuf[9]; /* "C" locale, or invalid locale? */ if (lcid == 0 || lcid == (LCID) -1) @@ -967,7 +968,9 @@ __set_charset_from_locale (const char *locale, char *charset) else if (lcid == 0x042e) /* hsb_DE (Upper Sorbian/Germany) */ cs = "ISO-8859-2"; else if (lcid == 0x0491 /* gd_GB (Scots Gaelic/Great Britain) */ - || has_modifier ("@euro")) + || (has_modifier ("@euro") + && GetLocaleInfoW (lcid, LOCALE_SINTLSYMBOL, wbuf, 9) + && !wcsncmp (wbuf, L"EUR", 3))) cs = "ISO-8859-15"; else cs = "ISO-8859-1"; -- 2.11.0