mailing list of musl libc
 help / color / mirror / code / Atom feed
From: Rich Felker <dalias@libc.org>
To: Petr Pisar <petr.pisar@atlas.cz>
Cc: musl@lists.openwall.com
Subject: Re: [musl] nl_langinfo(CODESET) does not match locale
Date: Sat, 11 May 2024 17:33:55 -0400	[thread overview]
Message-ID: <20240511213354.GT10433@brightrain.aerifal.cx> (raw)
In-Reply-To: <Zj-xseFnuBhaaa76@album.bayer.uni.cx>

On Sat, May 11, 2024 at 07:58:09PM +0200, Petr Pisar wrote:
> When debugging test failures in libisds on Gentoo with musl
> <https://bugs.gentoo.org/show_bug.cgi?id=928107>, I found that
> nl_langinfo(CODESET) does not match current locale.
> 
> A reproducer:
> 
> #include <locale.h>
> #include <stdio.h>
> #include <langinfo.h>
> 
> int main(void) {
>     char *old_locale = setlocale(LC_ALL, "cs_CZ.ISO8859-2");
>     if (old_locale == NULL) {
>         perror("setlocale() set failed");
>         return 1;
>     }
>     old_locale = setlocale(LC_ALL, NULL);
>     if (old_locale == NULL) {
>         perror("setlocale() query failed");
>         return 1;
>     }
>     printf("Current LC_ALL=%s\n", old_locale);
>     printf("CODESET=%s\n", nl_langinfo(CODESET));
>     return 0;
> }
> 
> # gcc test.c && ./a.out
> Current LC_ALL=cs_CZ.ISO8859-2
> CODESET=UTF-8
> 
> While on glibc:
> 
> $ gcc test.c && ./a.out
> Current LC_ALL=cs_CZ.ISO8859-2
> CODESET=ISO-8859-2

Yes it does match. The encoding on musl is *always* UTF-8. The only
weirdness here is that, presently, all locale names exist, and in the
absence of a translation file, are just aliases for C.UTF-8.

> I can see that for cs_CZ.UTF8 locale, it nl_langinfo() correctly reports UTF-8,
> as well for C reports ASCII. However, for any other character set it always
> returns UTF-8.
> 
> I found a notice <https://wiki.gentoo.org/wiki/Musl_usage_guide#Locales> that
> musl does not implements non-UTF-8 locales. If that is true, then selocale() for
> "cs_CZ.ISO8859-2" should fail, instead of accepting the locale.

It's an open issue that users/applications would like to be able to
know "no such locale is installed" when attempting to set an explicit
locale by name, and it will probably be resolved by making
setlocale(...,"explicit_name.bad_encoding") fail (and likewise, any
explicit name not matching a file fail) but setlocale(...,"") where
the environment contains a bad locale name succeed and produce a
default UTF-8 locale. This part of the big pending locale-overhaul
project.

Rich

      reply	other threads:[~2024-05-11 21:33 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-11 17:58 Petr Pisar
2024-05-11 21:33 ` Rich Felker [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240511213354.GT10433@brightrain.aerifal.cx \
    --to=dalias@libc.org \
    --cc=musl@lists.openwall.com \
    --cc=petr.pisar@atlas.cz \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).