iliaa Thu Oct 10 12:29:35 2002 EDT Modified files: /php4/ext/standard string.c formatted_print.c Log: This patch fixes handling of floats on locales where decimal point is not a '.'. Problem is best demonstrated by bug #17079. Index: php4/ext/standard/string.c diff -u php4/ext/standard/string.c:1.319 php4/ext/standard/string.c:1.320 --- php4/ext/standard/string.c:1.319 Wed Oct 9 09:50:06 2002 +++ php4/ext/standard/string.c Thu Oct 10 12:29:35 2002 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: string.c,v 1.319 2002/10/09 13:50:06 andrey Exp $ */ +/* $Id: string.c,v 1.320 2002/10/10 16:29:35 iliaa Exp $ */ /* Synced with php 3.0 revision 1.193 1999-06-16 [ssb] */ @@ -3216,6 +3216,19 @@ efree(args); RETVAL_STRING(retval, 1); + + if (cat == LC_NUMERIC || cat == LC_ALL) { + struct lconv *lc; + lc = localeconv(); + + EG(float_separator)[0] = (lc->decimal_point)[0]; + + if ((lc->decimal_point)[0] != '.') { + /* set locale back to C */ + setlocale(LC_NUMERIC, "C"); + } + } + return; } Index: php4/ext/standard/formatted_print.c diff -u php4/ext/standard/formatted_print.c:1.53 php4/ext/standard/formatted_print.c:1.54 --- php4/ext/standard/formatted_print.c:1.53 Sat Sep 21 11:08:59 2002 +++ php4/ext/standard/formatted_print.c Thu Oct 10 12:29:35 2002 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: formatted_print.c,v 1.53 2002/09/21 15:08:59 sas Exp $ */ +/* $Id: formatted_print.c,v 1.54 2002/10/10 16:29:35 iliaa Exp $ */ #include <math.h> /* modf() */ #include "php.h" @@ -284,14 +284,7 @@ char *cvt; register int i = 0, j = 0; int sign, decpt; - char decimal_point = '.'; -#ifdef HAVE_LOCALECONV - struct lconv l; - - localeconv_r(&l); - - decimal_point = l.decimal_point[0]; -#endif + char decimal_point = EG(float_separator)[0]; PRINTF_DEBUG(("sprintf: appenddouble(%x, %x, %x, %f, %d, '%c', %d, %c)\n", *buffer, pos, size, number, width, padding, alignment, fmt)); @@ -611,14 +604,13 @@ case 'e': case 'f': /* XXX not done */ - convert_to_double_ex(args[argnum]); php_sprintf_appenddouble(&result, &outpos, &size, Z_DVAL_PP(args[argnum]), width, padding, alignment, precision, adjusting, format[inpos], always_sign); break; - + case 'c': convert_to_long_ex(args[argnum]); php_sprintf_appendchar(&result, &outpos, &size,
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php