From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mout.kundenserver.de (mout.kundenserver.de [217.72.192.75]) by sourceware.org (Postfix) with ESMTPS id 255FD3858D1E for ; Sat, 25 Mar 2023 11:49:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 255FD3858D1E Authentication-Results: sourceware.org; dmarc=fail (p=none dis=none) header.from=cygwin.com Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=cygwin.com Received: from calimero.vinschen.de ([24.134.7.25]) by mrelayeu.kundenserver.de (mreue108 [212.227.15.183]) with ESMTPSA (Nemesis) id 1MeTsQ-1qDzdP0yu4-00aROS for ; Sat, 25 Mar 2023 12:49:07 +0100 Received: by calimero.vinschen.de (Postfix, from userid 500) id 6033AA80CAF; Sat, 25 Mar 2023 12:49:06 +0100 (CET) Date: Sat, 25 Mar 2023 12:49:06 +0100 From: Corinna Vinschen To: cygwin@cygwin.com Subject: Re: newlocale: Linux incompatibility Message-ID: Reply-To: cygwin@cygwin.com Mail-Followup-To: cygwin@cygwin.com References: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: X-Provags-ID: V03:K1:5S8n7UAOcCEAIWLEZQcNDbmQWYsk9dwyA4Wp1SVfUOvT0yOlycP JQ3kLPFfIOuDXF7W6HGk4pT0Bhw4gp6w2U4ff7eUnNXIHWrNdDJZ9Cm3F0atEap8VNP1g3d C1qf7uTEtQqYR7aDl68mAHnL2GHHItm+BKCtKmfrThtukdhdiZpdmf3zXTMa/XkEGslDnyn Xeh6UQ9q6DNsGvJYthy9g== UI-OutboundReport: notjunk:1;M01:P0:QT4ywd6XXC8=;iNjN5qwifGAmzUOaABJ4xpmk6Mx eepnRY2XzJbjkQCSr69b/SrQiFQbEuOW43jZMOfuTteETaRyXRlM/tS61jg8jyFKpJSt+XYHd 4JC+retLNPzbo6kRuSizj9lA3vSS5Hlkj44C0dLMdJxLvUGuaiGTG5leZqQSQfsyZhaWBCb2T gjRUbMpjvylvkWNiAORn8+Y2pIPftMuS2FwdG53px/Fcxm3K4g9x7Hzfx2AFDHd/pceGkIyqg 6sRVGEP2OzYYB+VTzbT4cXIHPLhz1QPO38yIn06Q0F8TjuQPfKl6xCVsZQo/6dTSPCWk1otkw LBT4SGBnMsQzq2vnFaQsRjKo9VKst1tYiRfVcYAAZLl6SpzCszAOsZNvfUA5fCn4zYL64CbPi lBBjKJTxxTlwPe5bWWTBHP/BV6ItFHS3jAqO6cBAXvef6ray+B5cKir7nt/9DuqN6A/H6kyhJ ODklVkoQGcaSMG4hnIbdSclMdOnJXHyaS3m/OjzDUyUMyEELz4GVc2Byd3FcQnTag+4sGfSCm ShOozQF/xvH5lW0m1uxlJpAmqL7dNIIsFnI1L5ARD/x5o11MNCgM85xrtDhsAbVXa0YyszzCR ZN6hmkOQQA8p1lprottqcFZfAwgID8K9cAJQkIMpVdo65u5nQDiQSm/T8vmNXYq9tD7K1BbPh pyZBaapVBLeehDEArKC9aurXpXhhq9DpU9P5Hc4n2g== X-Spam-Status: No, score=-97.6 required=5.0 tests=BAYES_00,GOOD_FROM_CORINNA_CYGWIN,KAM_DMARC_NONE,KAM_DMARC_STATUS,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_FAIL,SPF_HELO_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On Mar 24 16:49, Brian Inglis via Cygwin wrote: > On 2023-03-24 06:18, Corinna Vinschen via Cygwin wrote: > > > First, it's a bug in the Emacs testsuite. The test simply assumes that > > > there's no en_DE locale on any system, but that's just not true. > > > Windows support the RFC 5646 locale "en-DE", which is called "English > > > (Germany)" in the "Region" settings. > > > > > > You can also check with `locale -av | less' and search for en_DE. > > > > > > For the reminder of this mail, I assume you're talking about Cygwin 3.5. > > > I won't fix this for 3.4 anymore, given how much locale handling has > > > changed for 3.5. > > > > > > The second bug is that Cygwin blindly trusts the Windows function > > > ResolveLocaleName(). That function blatantly converts even vaguely > > > similar locales into something it supports. E.g., it converts "en-XY" > > > to "en-US". I. .e., even if you use "en_XY.utf8" as locale, the above > > > testcase will wrongly succeed. So I have to rethink how I resolve POSIX > > > locales to Windows locales. > > Does Windows even consider https://www.rfc-editor.org/rfc/rfc4647 "Matching > of Language Tags", part of https://www.rfc-editor.org/info/bcp47 "Language > Tags", and if POSIX only matches exactly, will LANGUAGE be able to be used > for fallback? I never heard about an environment variable called LANGUAGE. This is about LANG/LC_ALL/LC_whatever, so POSIX syntax is required... > I currently define LANGUAGE=en_CA:en_GB:en in case en-CA is unsupported by > anything. > [I use my own en-CA locale not the glibc default created by https://rap.dk/.] > > Will "-" be supported like "_" as a separator in values? In Cygwin? No. The POSIX syntax is required, it's converted into a matching Windows RFC 5646 locale internally. > > > And the third bug is that Cygwin fails to set errno if it doesn't > > > support a locale, but that's a minor inconvenience in comparison. > > > > > > Thanks for the report, I totally missed the above problem with > > > ResolveLocaleName. > > > > I pushed a couple of patches which hopefully clean up the code. It's > > really frustrating how these Windows locale functions work. Or, rather, > > not work. I mean, come on... > > > > - ResolveLocaleName() resolves "ff-BF" to "ff-Latn-SN", not to > > "ff-Adlm-BF" or "ff-Latn-BF", even though both exist. > > > > - There's a locale called "sd-Arab-PK" and a locale "sd-Deva-IN". If > > you ask for the script used in "sd-IN", the result is "Arab", not > > "Deva". > > > > I had to create a replacement function for ResolveLocaleName which > > doesn't return totally screwy and unexpected results, and special case > > two more locales in /proc/locales output so the output makes sense. > > Aha - a nice new 3.5.0 feature - as well as /proc/codesets - is that > charsets e.g. ISO-10646, etc. rather than encodings e.g. UTF-8, etc.! It's a list of what you can use as codeset in $LANG and friends as in LC_CTYPE=lang_TERRITORY.codeset@modifier Corinna