|
|
Message-ID: <20190909165100.GH22009@port70.net>
Date: Mon, 9 Sep 2019 18:51:00 +0200
From: Szabolcs Nagy <nsz@...t70.net>
To: musl@...ts.openwall.com
Subject: Re: printf doesn't respect locale
* Daniel Schoepe <daniel@...oepe.org> [2019-09-09 17:31:01 +0100]:
> I think I found a discrepancy between musl's behavior and the POSIX standard:
>
> According to the POSIX standard, the decimal separator used when using
> printf to print floating point numbers should come from the locale
> (https://pubs.opengroup.org/onlinepubs/9699919799/functions/fprintf.html):
>
> "The radix character is defined in the current locale (category
> LC_NUMERIC). In the POSIX locale, or in a locale where the radix
> character is not defined, the radix character shall default to a
> <period> ( '.' )."
>
> However, it seems that in musl, a period is always used for printing
> floating point numbers. For example, the following program prints
> "12.0" instead of "12,0" (which is printed when using GNU libc):
musl is posix conform.
it just only supports LC_NUMERIC locales where the radix
character is a period.
if you see a musl based system where LC_NUMERIC is defined
otherwise then report the issue to the integrator or
distributor of that system.
>
> #include <stdio.h>
> #include <locale.h>
>
> int main(int argc, char **argv) {
> setlocale(LC_ALL, "DE_de");
> printf("%f\n", 12.0f);
> }
the musl DE_de locale must use . as radix, so the output
is expected.
>
> This was tested using the latest git checkout of musl
> (a882841baf42e6a8b74cc33a239b84a9a79493db), compiled on Ubuntu 18.04
> using the musl-gcc script. It looks like the usage of "." as a
> separator is hardcoded in `fmt_fp`, for instance here:
> https://git.musl-libc.org/cgit/musl/tree/src/stdio/vfprintf.c#n392
>
> Best regards,
> Daniel
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.