setting LC_ALL to it's current value during startup

php.internals

Antony Dovgal

22 years ago
Hi all! Could somebody explain me why we're setting only LC_CTYPE to it's current value in main/main.c, line 1368 ? What is the reason to make all users to call setlocale() explicitly to set LC_ALL ? Of course, there can be some reasons I'm unaware of, but I'd like to propose following tiny patch: Index: main.c =================================================================== RCS file: /repository/php-src/main/main.c,v retrieving revision 1.601 diff -u -r1.601 main.c --- main.c 24 Mar 2004 13:33:26 -0000 1.601 +++ main.c 18 May 2004 12:14:12 -0000 @@ -1365,7 +1365,7 @@ PG(disable_classes) = NULL; #if HAVE_SETLOCALE - setlocale(LC_CTYPE, ""); + setlocale(LC_ALL, ""); #endif --- WBR, Antony Dovgal aka tony2001 tony2001@phpclub.net || antony@dovgal.com

Wez Furlong

22 years ago
Hey Antony, This is most likely due to some issues with serialize/unserialize and floating point numbers; we don't want the format to change with the locale, since it should be independent. Yes, it is a mess :) --Wez.

Antony Dovgal

22 years ago
On Tue, 18 May 2004 13:55:18 +0100 "Wez Furlong" <wez@thebrainroom.com> wrote:
> Hey Antony, > > This is most likely due to some issues with serialize/unserialize and floating > point numbers; we don't want the format to change with the locale, since it > should be independent. > > Yes, it is a mess :)
ok. but in this case we can set all except LC_NUMERIC and it should not affect floats. so, the patch should look like this: Index: main.c =================================================================== RCS file: /repository/php-src/main/main.c,v retrieving revision 1.601 diff -u -r1.601 main.c --- main.c 24 Mar 2004 13:33:26 -0000 1.601 +++ main.c 18 May 2004 13:08:18 -0000 @@ -1365,7 +1365,12 @@ PG(disable_classes) = NULL; #if HAVE_SETLOCALE + setlocale(LC_COLLATE, ""); setlocale(LC_CTYPE, ""); + setlocale(LC_MESSAGES, ""); + setlocale(LC_MONETARY, ""); + setlocale(LC_TIME, ""); + /* LC_NUMERIC is not set due to some issues with serialize/unserialize */ #endif #if HAVE_TZSET --- WBR, Antony Dovgal aka tony2001 tony2001@phpclub.net || antony@dovgal.com

Antony Dovgal

22 years ago
Could anybody comment this patch, please ? On Tue, 18 May 2004 17:09:42 +0400 Antony Dovgal <tony2001@phpclub.net> wrote:
> On Tue, 18 May 2004 13:55:18 +0100 > "Wez Furlong" <wez@thebrainroom.com> wrote: > > > Hey Antony, > > > > This is most likely due to some issues with serialize/unserialize and floating > > point numbers; we don't want the format to change with the locale, since it > > should be independent. > > > > Yes, it is a mess :) > > ok. > but in this case we can set all except LC_NUMERIC and it should not affect floats. > so, the patch should look like this: > > Index: main.c > =================================================================== > RCS file: /repository/php-src/main/main.c,v > retrieving revision 1.601 > diff -u -r1.601 main.c > --- main.c 24 Mar 2004 13:33:26 -0000 1.601 > +++ main.c 18 May 2004 13:08:18 -0000 > @@ -1365,7 +1365,12 @@ > PG(disable_classes) = NULL; > > #if HAVE_SETLOCALE > + setlocale(LC_COLLATE, ""); > setlocale(LC_CTYPE, ""); > + setlocale(LC_MESSAGES, ""); > + setlocale(LC_MONETARY, ""); > + setlocale(LC_TIME, ""); > + /* LC_NUMERIC is not set due to some issues with serialize/unserialize */ > #endif > > #if HAVE_TZSET
--- WBR, Antony Dovgal aka tony2001 tony2001@phpclub.net || antony@dovgal.com