From 2d5492453a4aef0b761800cd89fd41b11af6c2d3 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Sun, 26 Mar 2023 13:06:38 +0200 Subject: [PATCH] Cygwin: locales: fix behaviour for @euro locales Latest Windows supports more EU locales than GLibc, so some of the @euro locales are not covered by checking the GLibc locale defaults. Those locales have no long history, they are all UTF-8. So just check for @euro in the UTF-8 case and set them to ISO-8859-15. Fixes: 2483e54be852e ("Cygwin: locale: Set default charset from Linux locale -> codeset mapping") Signed-off-by: Corinna Vinschen --- winsup/cygwin/nlsfuncs.cc | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/winsup/cygwin/nlsfuncs.cc b/winsup/cygwin/nlsfuncs.cc index 6821a43c3..b097a6e5f 100644 --- a/winsup/cygwin/nlsfuncs.cc +++ b/winsup/cygwin/nlsfuncs.cc @@ -1610,9 +1610,17 @@ __set_charset_from_locale (const char *loc, char *charset) cs = "ISO-8859-13"; break; case 1258: - default: cs = "UTF-8"; break; + default: + /* Some (pretty new) EU locales don't exist in GLibc and haven't been + catched above. Check for @euro modifier again and make these locales + always use ISO-8859-15. */ + if (modifier && !strcmp (modifier + 1, "euro")) + cs = "ISO-8859-15"; + else + cs = "UTF-8"; + break; } stpcpy (charset, cs); }