[bugs] [illumos gate - Bug #1232] setlocale switch to C is broken

illumos bugs bugs at lists.illumos.org
Wed Jul 20 14:09:48 PDT 2011


Issue #1232 has been updated by Jason King.

File locale.diff added
Assignee set to Jason King
% Done changed from 0 to 90

Ugly historical mess...

SYSV defines _numeric (which appears to be exposed from libc) which has some locale data.  *printf uses this for the decimal point when formatting floating point types (but amusingly enough, not for integer types).

It appears source:usr/src/lib/libc/port/locale/lnumeric.c at 13407#52 is not updating _numeric when it switches _to_ C/POSIX (as it is cached).

Attached is a diff that fixes that, as well as updates *printf to no longer depending on the legacy _numeric bits. 
----------------------------------------
Bug #1232: setlocale switch to C is broken
https://www.illumos.org/issues/1232

Author: Julian Wiesener
Status: New
Priority: Urgent
Assignee: Jason King
Category: locale - data and messages
Target version: 
Difficulty: Hard
Tags: locale


Result is https://www.illumos.org/issues/1203 since perl uses setlocale(LC_NUMERIC, "C"); to check the version number.

Testcase:
$ cat test.c
#include <locale.h>
#include <stdio.h>

int main(void)
{
        setlocale(LC_NUMERIC, "de_DE.UTF-8");
        printf("%f\n",2.5);
        setlocale(LC_NUMERIC, "C");
        printf("%f\n",2.5);
        setlocale(LC_NUMERIC, "en_US.UTF-8");
        printf("%f\n",2.5);
}
$ CC -o test test.c           
$ LC_NUMERIC=de_DE.UTF-8 ./test
2,500000
2,500000
2.500000


richlowe confirmed the bug: http://pastie.org/private/5e4e8xyzbh9jcjyremqlq


I set it to urgent, since it's a showstopper for OIs first Illumos based /dev Release



-- 
You have received this notification because you have either subscribed to it, or are involved in it.
To change your notification preferences, please click here: http://www.illumos.org/my/account



More information about the bugs mailing list