|
Message-ID: <CAPy=dbJVxof7_HRqw_cSFdz1AfJkCvYPnQ4iRk+OysbRu7huDw@mail.gmail.com> Date: Mon, 9 Sep 2019 17:31:01 +0100 From: Daniel Schoepe <daniel@...oepe.org> To: musl@...ts.openwall.com Subject: printf doesn't respect locale Hi, 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): #include <stdio.h> #include <locale.h> int main(int argc, char **argv) { setlocale(LC_ALL, "DE_de"); printf("%f\n", 12.0f); } 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.