[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