[PHP-CVS] cvs: php-src(PHP_4_3) / NEWS /ext/standard formatted_print.c /ext/standard/tests/strings sprintf_f.phpt
helly Sun May 16 17:20:30 2004 EDT Added files: (Branch: PHP_4_3) /php-src/ext/standard/tests/strings sprintf_f.phpt Modified files: /php-srcNEWS /php-src/ext/standard formatted_print.c Log: MFH: Fix printf with floats http://cvs.php.net/diff.php/php-src/NEWS?r1=1.1247.2.661&r2=1.1247.2.662&ty=u Index: php-src/NEWS diff -u php-src/NEWS:1.1247.2.661 php-src/NEWS:1.1247.2.662 --- php-src/NEWS:1.1247.2.661 Thu May 13 13:44:33 2004 +++ php-src/NEWSSun May 16 17:20:29 2004 @@ -2,6 +2,7 @@ ||| ?? ??? 2004, Version 4.3.7 - Upgraded bundled GD library to 2.0.23. (Ilia) +- Fixed problems with *printf() functions and '%f' formatting. (Marcus) - Fixed possible crash inside pg_copy_(to|from) function if delimiter is more then 1 character long. (Ilia) - Fixed crash inside cpdf_place_inline_image() when working with truecolor http://cvs.php.net/diff.php/php-src/ext/standard/formatted_print.c?r1=1.59.2.9&r2=1.59.2.10&ty=u Index: php-src/ext/standard/formatted_print.c diff -u php-src/ext/standard/formatted_print.c:1.59.2.9 php-src/ext/standard/formatted_print.c:1.59.2.10 --- php-src/ext/standard/formatted_print.c:1.59.2.9 Tue May 11 15:51:50 2004 +++ php-src/ext/standard/formatted_print.c Sun May 16 17:20:30 2004 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: formatted_print.c,v 1.59.2.9 2004/05/11 19:51:50 iliaa Exp $ */ +/* $Id: formatted_print.c,v 1.59.2.10 2004/05/16 21:20:30 helly Exp $ */ #include /* modf() */ #include "php.h" @@ -65,6 +65,7 @@ static char *php_convert_to_decimal(double arg, int ndigits, int *decpt, int *sign, int eflag) { register int r2; + int mvl; double fi, fj; register char *p, *p1; /*THREADX*/ @@ -90,13 +91,21 @@ p1 = &cvt_buf[NDIG]; while (fi != 0) { fj = modf(fi / 10, &fi); + if (p1 <= &cvt_buf[0]) { + mvl = NDIG - ndigits; + memmove(&cvt_buf[mvl], &cvt_buf[0], NDIG-mvl-1); + p1 += mvl; + } *--p1 = (int) ((fj + .03) * 10) + '0'; r2++; } while (p1 < &cvt_buf[NDIG]) *p++ = *p1++; } else if (arg > 0) { - while ((fj = arg * 10.0) < 0.999) { + while ((fj = arg * 10) < 1) { + if (!eflag && (r2 * -1) < ndigits) { + break; + } arg = fj; r2--; } @@ -109,10 +118,17 @@ cvt_buf[0] = '\0'; return (cvt_buf); } + if (p <= p1 && p < &cvt_buf[NDIG]) { + arg = modf(arg * 10, &fj); + if ((int)fj==10) { + *p++ = '1'; + fj = 0; + *decpt = ++r2; + } while (p <= p1 && p < &cvt_buf[NDIG]) { - arg *= 10; - arg = modf(arg, &fj); *p++ = (int) fj + '0'; + arg = modf(arg * 10, &fj); + } } if (p1 >= &cvt_buf[NDIG]) { cvt_buf[NDIG - 1] = '\0'; @@ -286,7 +302,7 @@ char numbuf[NUM_BUF_SIZE]; char *cvt; register int i = 0, j = 0; - int sign, decpt; + int sign, decpt, cvt_len; char decimal_point = EG(float_separator)[0]; PRINTF_DEBUG(("sprintf: appenddouble(%x, %x, %x, %f, %d, '%c', %d, %c)\n", @@ -312,6 +328,7 @@ } cvt = php_convert_to_decimal(number, precision, &decpt, &sign, (fmt == 'e')); + cvt_len = strlen(cvt); if (sign) { numbuf[i++] = '-'; @@ -330,10 +347,15 @@ } } } else { - while (decpt-- > 0) - numbuf[i++] = cvt[j++]; - if (precision > 0) + while (decpt-- > 0) { + numbuf[i++] = j < cvt_len ? cvt[j++] : '0'; + } + if (precision > 0) { numbuf[i++] = decimal_point; + while (precision-- > 0) { + numbuf[i++] = j < cvt_len ? cvt[j++] : '0'; + } + } } } else if (fmt == 'e' || fmt == 'E') { char *exp_p; http://cvs.php.net/co.php/php-src/ext/standard/tests/strings/sprintf_f.phpt?r=1.1&p=1 Index: php-src/ext/standard/tests/strings/sprintf_f.phpt +
[PHP-CVS] cvs: php-src(PHP_4_3) /ext/sybase_ct php_sybase_ct.c
thekid Sun May 16 16:36:41 2004 EDT Modified files: (Branch: PHP_4_3) /php-src/ext/sybase_ct php_sybase_ct.c Log: - MFH: Fixed auto-conversion from long to double when LONG_MAX / LONG_MIN where overflown http://cvs.php.net/diff.php/php-src/ext/sybase_ct/php_sybase_ct.c?r1=1.73.2.12&r2=1.73.2.13&ty=u Index: php-src/ext/sybase_ct/php_sybase_ct.c diff -u php-src/ext/sybase_ct/php_sybase_ct.c:1.73.2.12 php-src/ext/sybase_ct/php_sybase_ct.c:1.73.2.13 --- php-src/ext/sybase_ct/php_sybase_ct.c:1.73.2.12 Fri Apr 16 12:27:57 2004 +++ php-src/ext/sybase_ct/php_sybase_ct.c Sun May 16 16:36:41 2004 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: php_sybase_ct.c,v 1.73.2.12 2004/04/16 16:27:57 thetaphi Exp $ */ +/* $Id: php_sybase_ct.c,v 1.73.2.13 2004/05/16 20:36:41 thekid Exp $ */ #ifdef HAVE_CONFIG_H @@ -1127,15 +1127,14 @@ convert_to_long(&result->data[i][j]); break; case 2: - /* We also get numbers that are actually integers here due to the check on -* precision against > 9 (ranges are -1E10 to -1E9 and 1E9 to 1E10). As we -* cannot be sure that they "fit" into MIN_LONG <= x <= MAX_LONG, we call -* convert_to_double() on them. This is a small performance penalty, but -* ensures that "select 2147483648" will be a float and "select 2147483647" -* will be become an int. -*/ convert_to_double(&result->data[i][j]); break; + case 3: + /* This signals we have an integer datatype, but we need to convert to double if we +* overflow. +*/ + convert_scalar_to_number(&result->data[i][j]); + break; } } } @@ -1243,7 +1242,7 @@ case CS_DECIMAL_TYPE: result->datafmt[i].maxlength = result->datafmt[i].precision + 3; /* numeric(10) vs numeric(10, 1) */ - result->numerics[i] = (result->datafmt[i].scale == 0 && result->datafmt[i].precision <= 9) ? 1 : 2; + result->numerics[i] = (result->datafmt[i].scale == 0) ? 3 : 2; break; default: result->datafmt[i].maxlength++; -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/sybase_ct/tests test_types.phpt
thekid Sun May 16 16:33:45 2004 EDT Modified files: /php-src/ext/sybase_ct/teststest_types.phpt Log: - Fixed test for LONG_MIN / LONG_MAX for 64-bit platforms http://cvs.php.net/diff.php/php-src/ext/sybase_ct/tests/test_types.phpt?r1=1.2&r2=1.3&ty=u Index: php-src/ext/sybase_ct/tests/test_types.phpt diff -u php-src/ext/sybase_ct/tests/test_types.phpt:1.2 php-src/ext/sybase_ct/tests/test_types.phpt:1.3 --- php-src/ext/sybase_ct/tests/test_types.phpt:1.2 Sat Jan 24 10:18:52 2004 +++ php-src/ext/sybase_ct/tests/test_types.phpt Sun May 16 16:33:44 2004 @@ -6,18 +6,21 @@ >> Query: select 1 as "integer", --2147483647 as "integer_min", --2147483648 as "integer_min_exceed", -2147483647 as "integer_max", -2147483648 as "integer_max_exceed", +-%s as "integer_min", +-%s as "integer_min_exceed", +%s as "integer_max", +%s as "integer_max_exceed", 1.0 as "float", $22.36 as "money", "Binford" as "string", @@ -53,13 +56,13 @@ ["integer"]=> int(1) ["integer_min"]=> -int(-2147483647) +int(-%s) ["integer_min_exceed"]=> -float(-2147483648) +float(-%s) ["integer_max"]=> -int(2147483647) +int(%s) ["integer_max_exceed"]=> -float(2147483648) +float(%s) ["float"]=> float(1) ["money"]=> -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/sybase_ct php_sybase_ct.c
thekid Sun May 16 16:30:36 2004 EDT Modified files: /php-src/ext/sybase_ct php_sybase_ct.c Log: - Fixed auto-conversion from long to double when LONG_MAX / LONG_MIN where overflown http://cvs.php.net/diff.php/php-src/ext/sybase_ct/php_sybase_ct.c?r1=1.93&r2=1.94&ty=u Index: php-src/ext/sybase_ct/php_sybase_ct.c diff -u php-src/ext/sybase_ct/php_sybase_ct.c:1.93 php-src/ext/sybase_ct/php_sybase_ct.c:1.94 --- php-src/ext/sybase_ct/php_sybase_ct.c:1.93 Fri Apr 16 12:27:13 2004 +++ php-src/ext/sybase_ct/php_sybase_ct.c Sun May 16 16:30:35 2004 @@ -18,7 +18,7 @@ +--+ */ -/* $Id: php_sybase_ct.c,v 1.93 2004/04/16 16:27:13 thetaphi Exp $ */ +/* $Id: php_sybase_ct.c,v 1.94 2004/05/16 20:30:35 thekid Exp $ */ #ifdef HAVE_CONFIG_H @@ -1127,15 +1127,14 @@ convert_to_long(&result->data[i][j]); break; case 2: - /* We also get numbers that are actually integers here due to the check on -* precision against > 9 (ranges are -1E10 to -1E9 and 1E9 to 1E10). As we -* cannot be sure that they "fit" into MIN_LONG <= x <= MAX_LONG, we call -* convert_to_double() on them. This is a small performance penalty, but -* ensures that "select 2147483648" will be a float and "select 2147483647" -* will be become an int. -*/ convert_to_double(&result->data[i][j]); break; + case 3: + /* This signals we have an integer datatype, but we need to convert to double if we +* overflow. +*/ + convert_scalar_to_number(&result->data[i][j]); + break; } } } @@ -1243,7 +1242,7 @@ case CS_DECIMAL_TYPE: result->datafmt[i].maxlength = result->datafmt[i].precision + 3; /* numeric(10) vs numeric(10, 1) */ - result->numerics[i] = (result->datafmt[i].scale == 0 && result->datafmt[i].precision <= 9) ? 1 : 2; + result->numerics[i] = (result->datafmt[i].scale == 0) ? 3 : 2; break; default: result->datafmt[i].maxlength++; -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/sybase_ct/tests test_long.phpt
thekid Sun May 16 16:28:31 2004 EDT Added files: /php-src/ext/sybase_ct/teststest_long.phpt Log: - Initial release http://cvs.php.net/co.php/php-src/ext/sybase_ct/tests/test_long.phpt?r=1.1&p=1 Index: php-src/ext/sybase_ct/tests/test_long.phpt +++ php-src/ext/sybase_ct/tests/test_long.phpt --TEST-- Sybase-CT select LONG_MAX / LONG_MIN --SKIPIF-- --FILE-- --EXPECTF-- bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) >>> Query: select value from test_long <<< Return: resource array(6) { [0]=> array(1) { ["value"]=> int(%s) } [1]=> array(1) { ["value"]=> int(%s) } [2]=> array(1) { ["value"]=> float(%s) } [3]=> array(1) { ["value"]=> int(-%s) } [4]=> array(1) { ["value"]=> int(-%s) } [5]=> array(1) { ["value"]=> float(-%s) } } bool(true) -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src(PHP_4_3) /ext/sockets sockets.c
iliaa Sun May 16 11:34:56 2004 EDT Modified files: (Branch: PHP_4_3) /php-src/ext/socketssockets.c Log: MFH: Do not allocate error buffer at the start of every request. http://cvs.php.net/diff.php/php-src/ext/sockets/sockets.c?r1=1.125.2.20&r2=1.125.2.21&ty=u Index: php-src/ext/sockets/sockets.c diff -u php-src/ext/sockets/sockets.c:1.125.2.20 php-src/ext/sockets/sockets.c:1.125.2.21 --- php-src/ext/sockets/sockets.c:1.125.2.20Wed Feb 25 17:12:03 2004 +++ php-src/ext/sockets/sockets.c Sun May 16 11:34:56 2004 @@ -19,7 +19,7 @@ +--+ */ -/* $Id: sockets.c,v 1.125.2.20 2004/02/25 22:12:03 iliaa Exp $ */ +/* $Id: sockets.c,v 1.125.2.21 2004/05/16 15:34:56 iliaa Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -350,7 +350,7 @@ buf = hstrerror(error); #else { - sprintf(SOCKETS_G(strerror_buf), "Host lookup error %d", error); + spprintf(&(SOCKETS_G(strerror_buf), "Host lookup error %d", error); buf = SOCKETS_G(strerror_buf); } #endif @@ -364,7 +364,7 @@ if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, error, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &tmp, 0, NULL)) { - strlcpy(SOCKETS_G(strerror_buf), (char *) tmp, 1); + SOCKETS_G(strerror_buf) = estrndup(tmp); LocalFree(tmp); buf = SOCKETS_G(strerror_buf); @@ -483,18 +483,18 @@ /* {{{ PHP_RINIT_FUNCTION */ PHP_RINIT_FUNCTION(sockets) { - if ((SOCKETS_G(strerror_buf) = emalloc(16384))) - return SUCCESS; - - return FAILURE; + return SUCCESS; } /* }}} */ /* {{{ PHP_RSHUTDOWN_FUNCTION */ PHP_RSHUTDOWN_FUNCTION(sockets) { - efree(SOCKETS_G(strerror_buf)); - + if (SOCKETS_G(strerror_buf)) { + efree(SOCKETS_G(strerror_buf)); + SOCKETS_G(strerror_buf) = NULL; + } + return SUCCESS; } /* }}} */ -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/sockets sockets.c
iliaa Sun May 16 11:34:53 2004 EDT Modified files: /php-src/ext/socketssockets.c Log: Do not allocate error buffer at the start of every request. http://cvs.php.net/diff.php/php-src/ext/sockets/sockets.c?r1=1.161&r2=1.162&ty=u Index: php-src/ext/sockets/sockets.c diff -u php-src/ext/sockets/sockets.c:1.161 php-src/ext/sockets/sockets.c:1.162 --- php-src/ext/sockets/sockets.c:1.161 Sun Mar 14 12:53:28 2004 +++ php-src/ext/sockets/sockets.c Sun May 16 11:34:53 2004 @@ -19,7 +19,7 @@ +--+ */ -/* $Id: sockets.c,v 1.161 2004/03/14 17:53:28 jan Exp $ */ +/* $Id: sockets.c,v 1.162 2004/05/16 15:34:53 iliaa Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -322,7 +322,7 @@ buf = hstrerror(error); #else { - sprintf(SOCKETS_G(strerror_buf), "Host lookup error %d", error); + spprintf(&(SOCKETS_G(strerror_buf), "Host lookup error %d", error); buf = SOCKETS_G(strerror_buf); } #endif @@ -336,7 +336,7 @@ if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, error, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &tmp, 0, NULL)) { - strlcpy(SOCKETS_G(strerror_buf), (char *) tmp, 1); + SOCKETS_G(strerror_buf) = estrndup(tmp); LocalFree(tmp); buf = SOCKETS_G(strerror_buf); @@ -503,8 +503,6 @@ /* {{{ PHP_RINIT_FUNCTION */ PHP_RINIT_FUNCTION(sockets) { - SOCKETS_G(strerror_buf) = emalloc(16384); - return SUCCESS; } /* }}} */ @@ -512,8 +510,11 @@ /* {{{ PHP_RSHUTDOWN_FUNCTION */ PHP_RSHUTDOWN_FUNCTION(sockets) { - efree(SOCKETS_G(strerror_buf)); - + if (SOCKETS_G(strerror_buf)) { + efree(SOCKETS_G(strerror_buf)); + SOCKETS_G(strerror_buf) = NULL; + } + return SUCCESS; } /* }}} */ -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/standard/tests/strings sprintf_f.phpt
helly Sun May 16 10:48:45 2004 EDT Added files: /php-src/ext/standard/tests/strings sprintf_f.phpt Log: - Add new test http://cvs.php.net/co.php/php-src/ext/standard/tests/strings/sprintf_f.phpt?r=1.1&p=1 Index: php-src/ext/standard/tests/strings/sprintf_f.phpt +++ php-src/ext/standard/tests/strings/sprintf_f.phpt --TEST-- sprintf %f --FILE-- --EXPECTF-- string(4) "1.20" string(4) "1.20" string(4) "1.20" string(4) "1.20" string(5) " 3.40" string(5) "3.40 " string(5) "03.40" string(5) "3.400" string(7) " -5.60" string(7) "-5.60 " string(7) "-005.60" string(7) "-5.6000" string(105) "12345678%d00." -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src(PHP_4_3) /ext/fdf fdf.c
iliaa Sun May 16 10:38:27 2004 EDT Modified files: (Branch: PHP_4_3) /php-src/ext/fdffdf.c Log: MFH: Added missing safe_mode & open_basedir checks. http://cvs.php.net/diff.php/php-src/ext/fdf/fdf.c?r1=1.66.2.11&r2=1.66.2.12&ty=u Index: php-src/ext/fdf/fdf.c diff -u php-src/ext/fdf/fdf.c:1.66.2.11 php-src/ext/fdf/fdf.c:1.66.2.12 --- php-src/ext/fdf/fdf.c:1.66.2.11 Wed Sep 10 21:45:02 2003 +++ php-src/ext/fdf/fdf.c Sun May 16 10:38:26 2004 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: fdf.c,v 1.66.2.11 2003/09/11 01:45:02 hholzgra Exp $ */ +/* $Id: fdf.c,v 1.66.2.12 2004/05/16 14:38:26 iliaa Exp $ */ /* FdfTk lib 2.0 is a Complete C/C++ FDF Toolkit available from http://beta1.adobe.com/ada/acrosdk/forms.html. */ @@ -721,6 +721,10 @@ return; } + if (php_check_open_basedir(filename TSRMLS_CC) || (PG(safe_mode) && !php_checkuid(filename, "wb+", CHECKUID_CHECK_MODE_PARAM))) { + RETURN_FALSE; + } + ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf); err = FDFSetFile(fdf, filename); @@ -1481,6 +1485,10 @@ ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf); + if (php_check_open_basedir(savepath TSRMLS_CC) || (PG(safe_mode) && !php_checkuid(savepath, "wb+", CHECKUID_CHECK_MODE_PARAM))) { + RETURN_FALSE; + } + strncpy(pathbuf , savepath, MAXPATHLEN-1); pathbuf[MAXPATHLEN-1] = '\0'; -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/fdf fdf.c
iliaa Sun May 16 10:38:19 2004 EDT Modified files: /php-src/ext/fdffdf.c Log: Added missing safe_mode & open_basedir checks. http://cvs.php.net/diff.php/php-src/ext/fdf/fdf.c?r1=1.85&r2=1.86&ty=u Index: php-src/ext/fdf/fdf.c diff -u php-src/ext/fdf/fdf.c:1.85 php-src/ext/fdf/fdf.c:1.86 --- php-src/ext/fdf/fdf.c:1.85 Thu Jan 8 03:15:25 2004 +++ php-src/ext/fdf/fdf.c Sun May 16 10:38:19 2004 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: fdf.c,v 1.85 2004/01/08 08:15:25 andi Exp $ */ +/* $Id: fdf.c,v 1.86 2004/05/16 14:38:19 iliaa Exp $ */ /* FdfTk lib 2.0 is a Complete C/C++ FDF Toolkit available from http://beta1.adobe.com/ada/acrosdk/forms.html. */ @@ -725,6 +725,10 @@ return; } + if (php_check_open_basedir(filename TSRMLS_CC) || (PG(safe_mode) && !php_checkuid(filename, "wb+", CHECKUID_CHECK_MODE_PARAM))) { + RETURN_FALSE; + } + ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf); err = FDFSetFile(fdf, filename); @@ -1485,6 +1489,10 @@ ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf); + if (php_check_open_basedir(savepath TSRMLS_CC) || (PG(safe_mode) && !php_checkuid(savepath, "wb+", CHECKUID_CHECK_MODE_PARAM))) { + RETURN_FALSE; + } + strncpy(pathbuf , savepath, MAXPATHLEN-1); pathbuf[MAXPATHLEN-1] = '\0'; -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/standard formatted_print.c
helly Sun May 16 10:01:45 2004 EDT Modified files: /php-src/ext/standard formatted_print.c Log: - Fix printf with floats http://cvs.php.net/diff.php/php-src/ext/standard/formatted_print.c?r1=1.75&r2=1.76&ty=u Index: php-src/ext/standard/formatted_print.c diff -u php-src/ext/standard/formatted_print.c:1.75 php-src/ext/standard/formatted_print.c:1.76 --- php-src/ext/standard/formatted_print.c:1.75 Tue May 11 15:51:46 2004 +++ php-src/ext/standard/formatted_print.c Sun May 16 10:01:45 2004 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: formatted_print.c,v 1.75 2004/05/11 19:51:46 iliaa Exp $ */ +/* $Id: formatted_print.c,v 1.76 2004/05/16 14:01:45 helly Exp $ */ #include /* modf() */ #include "php.h" @@ -65,6 +65,7 @@ static char *php_convert_to_decimal(double arg, int ndigits, int *decpt, int *sign, int eflag) { register int r2; + int mvl; double fi, fj; register char *p, *p1; /*THREADX*/ @@ -90,13 +91,21 @@ p1 = &cvt_buf[NDIG]; while (fi != 0) { fj = modf(fi / 10, &fi); + if (p1 <= &cvt_buf[0]) { + mvl = NDIG - ndigits; + memmove(&cvt_buf[mvl], &cvt_buf[0], NDIG-mvl-1); + p1 += mvl; + } *--p1 = (int) ((fj + .03) * 10) + '0'; r2++; } while (p1 < &cvt_buf[NDIG]) *p++ = *p1++; } else if (arg > 0) { - while ((fj = arg * 10.0) < 0.999) { + while ((fj = arg * 10) < 1) { + if (!eflag && (r2 * -1) < ndigits) { + break; + } arg = fj; r2--; } @@ -109,10 +118,17 @@ cvt_buf[0] = '\0'; return (cvt_buf); } - while (p <= p1 && p < &cvt_buf[NDIG]) { - arg *= 10; - arg = modf(arg, &fj); + if (p <= p1 && p < &cvt_buf[NDIG]) { + arg = modf(arg * 10, &fj); + if ((int)fj==10) { + *p++ = '1'; + fj = 0; + *decpt = ++r2; + } + while (p <= p1 && p < &cvt_buf[NDIG]) { *p++ = (int) fj + '0'; + arg = modf(arg * 10, &fj); + } } if (p1 >= &cvt_buf[NDIG]) { cvt_buf[NDIG - 1] = '\0'; @@ -286,7 +302,7 @@ char numbuf[NUM_BUF_SIZE]; char *cvt; register int i = 0, j = 0; - int sign, decpt; + int sign, decpt, cvt_len; char decimal_point = EG(float_separator)[0]; PRINTF_DEBUG(("sprintf: appenddouble(%x, %x, %x, %f, %d, '%c', %d, %c)\n", @@ -312,6 +328,7 @@ } cvt = php_convert_to_decimal(number, precision, &decpt, &sign, (fmt == 'e')); + cvt_len = strlen(cvt); if (sign) { numbuf[i++] = '-'; @@ -330,10 +347,15 @@ } } } else { - while (decpt-- > 0) - numbuf[i++] = cvt[j++]; - if (precision > 0) + while (decpt-- > 0) { + numbuf[i++] = j < cvt_len ? cvt[j++] : '0'; + } + if (precision > 0) { numbuf[i++] = decimal_point; + while (precision-- > 0) { + numbuf[i++] = j < cvt_len ? cvt[j++] : '0'; + } + } } } else if (fmt == 'e' || fmt == 'E') { char *exp_p; -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext ext_skel
wez Sun May 16 08:10:35 2004 EDT Modified files: /php-src/extext_skel Log: ; http://cvs.php.net/diff.php/php-src/ext/ext_skel?r1=1.48&r2=1.49&ty=u Index: php-src/ext/ext_skel diff -u php-src/ext/ext_skel:1.48 php-src/ext/ext_skel:1.49 --- php-src/ext/ext_skel:1.48 Sun May 16 07:49:35 2004 +++ php-src/ext/ext_skelSun May 16 08:10:35 2004 @@ -182,7 +182,7 @@ // ARG_ENABLE("$extname", "enable $extname support", "no"); if (PHP_$EXTNAME != "no") { - EXTENSION("$extname", "$extname.c") + EXTENSION("$extname", "$extname.c"); } eof -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext ext_skel
wez Sun May 16 07:49:35 2004 EDT Modified files: /php-src/extext_skel Log: Add config.w32 template to ext_skel http://cvs.php.net/diff.php/php-src/ext/ext_skel?r1=1.47&r2=1.48&ty=u Index: php-src/ext/ext_skel diff -u php-src/ext/ext_skel:1.47 php-src/ext/ext_skel:1.48 --- php-src/ext/ext_skel:1.47 Sun Jun 29 12:07:17 2003 +++ php-src/ext/ext_skelSun May 16 07:49:35 2004 @@ -170,6 +170,22 @@ fi eof +$ECHO_N " config.w32$ECHO_C" +cat >config.w32 <.cvsignore
[PHP-CVS] cvs: php-src /ext/dom TODO attr.c cdatasection.c comment.c document.c documentfragment.c dom_fe.h element.c entityreference.c php_dom.c processinginstruction.c text.c xpath.c
rrichards Sun May 16 06:30:18 2004 EDT Modified files: /php-src/ext/domTODO attr.c cdatasection.c comment.c document.c documentfragment.c dom_fe.h element.c entityreference.c php_dom.c processinginstruction.c text.c xpath.c Log: constructors throw DOMException add DOM_PHP_ERR DomException code validate tagnames in constructors use C style comments update TODO http://cvs.php.net/diff.php/php-src/ext/dom/TODO?r1=1.1&r2=1.2&ty=u Index: php-src/ext/dom/TODO diff -u php-src/ext/dom/TODO:1.1 php-src/ext/dom/TODO:1.2 --- php-src/ext/dom/TODO:1.1Thu Jun 5 13:06:52 2003 +++ php-src/ext/dom/TODOSun May 16 06:30:16 2004 @@ -1,12 +1,4 @@ -1) Change _node_list_pointer to something faster than just a linked list. - Currently there to test that unlinked node tracking works -2) Possible create new object type for documents as these are the only types which need to track nodes - - Would also require its own dtor functionality -3) Define correct behavior. When certain types of nodes are destroyed, - do we unlink children (if referenced) or just destroy them. (Element/Attribute nodes) -4) Find out where XPath goes (this extension or its own) -5) What DOM object types are really needed (i.e. not currently using DOMString) -6) Determine how to handle non speced functionality. - i.e validation (add method or implement as property for processing) - - +For 5.1 +1) enhance XPath functionality +2) look at auto encoding support for in/output +3) What DOM object types are really needed (i.e. not currently using DOMString) http://cvs.php.net/diff.php/php-src/ext/dom/attr.c?r1=1.13&r2=1.14&ty=u Index: php-src/ext/dom/attr.c diff -u php-src/ext/dom/attr.c:1.13 php-src/ext/dom/attr.c:1.14 --- php-src/ext/dom/attr.c:1.13 Wed Mar 31 12:18:59 2004 +++ php-src/ext/dom/attr.c Sun May 16 06:30:16 2004 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: attr.c,v 1.13 2004/03/31 17:18:59 rrichards Exp $ */ +/* $Id: attr.c,v 1.14 2004/05/16 10:30:16 rrichards Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -52,23 +52,29 @@ xmlNodePtr oldnode = NULL; dom_object *intern; char *name, *value = NULL; - int name_len, value_len; + int name_len, value_len, name_valid; + php_set_error_handling(EH_THROW, dom_domexception_class_entry TSRMLS_CC); if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os|s", &id, dom_attr_class_entry, &name, &name_len, &value, &value_len) == FAILURE) { + php_std_error_handling(); return; } + php_std_error_handling(); intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC); - if (name_len == 0) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Attribute name is required"); + name_valid = xmlValidateName((xmlChar *) name, 0); + if (name_valid != 0) { + php_dom_throw_error(INVALID_CHARACTER_ERR, 1 TSRMLS_CC); RETURN_FALSE; } nodep = xmlNewProp(NULL, (xmlChar *) name, value); - if (!nodep) + if (!nodep) { + php_dom_throw_error(INVALID_STATE_ERR, 1 TSRMLS_CC); RETURN_FALSE; + } if (intern != NULL) { oldnode = (xmlNodePtr)intern->ptr; http://cvs.php.net/diff.php/php-src/ext/dom/cdatasection.c?r1=1.8&r2=1.9&ty=u Index: php-src/ext/dom/cdatasection.c diff -u php-src/ext/dom/cdatasection.c:1.8 php-src/ext/dom/cdatasection.c:1.9 --- php-src/ext/dom/cdatasection.c:1.8 Wed Mar 31 12:18:59 2004 +++ php-src/ext/dom/cdatasection.c Sun May 16 06:30:16 2004 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: cdatasection.c,v 1.8 2004/03/31 17:18:59 rrichards Exp $ */ +/* $Id: cdatasection.c,v 1.9 2004/05/16 10:30:16 rrichards Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -50,14 +50,19 @@ char *value = NULL; int value_len; + php_set_error_handling(EH_THROW, dom_domexception_class_entry TSRMLS_CC); if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_cdatasection_class_entry, &value, &value_len) == FAILURE) { + php_std_error_handling(); return; } + php_std_error_handling(); nodep = xmlNewCDataBlock(NULL, (xmlChar *) value, value_len); - if (!nodep) + if (!nodep) { + php_dom_throw_error(INVALID_STATE_ERR, 1 TSRMLS_CC); RETURN_FALSE; + } intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC); if (intern != NULL) { http://cvs.php.net/diff.php/php-src/ext/dom/comment.c?r1=1.8&r2=1.9&ty=u Index: php-src/ext/dom/comment.c diff -u php-src/ext/dom/comment.c:1.8