From: foobar Date: Fri, 18 Jul 2003 01:37:44 +0000 (+0000) Subject: MFH: Fixed bug #24640 (var_export and var_dump can not output large float). (Marcus) X-Git-Tag: php-4.3.3RC2~93 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5fc1090dbeb396660b44bd80a0f2e52e78f49e94;p=php MFH: Fixed bug #24640 (var_export and var_dump can not output large float). (Marcus) --- diff --git a/main/snprintf.c b/main/snprintf.c index cb52a83a94..b0794ca56c 100644 --- a/main/snprintf.c +++ b/main/snprintf.c @@ -1,3 +1,25 @@ +/* + +----------------------------------------------------------------------+ + | PHP Version 4 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997-2003 The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 2.02 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available at through the world-wide-web at | + | http://www.php.net/license/2_02.txt. | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Author: | + +----------------------------------------------------------------------+ + + $Id$ +*/ + +/* $Id$ */ + /* ==================================================================== * Copyright (c) 1995-1998 The Apache Group. All rights reserved. * @@ -132,6 +154,8 @@ ap_php_conv_10(register wide_int num, register bool_int is_unsigned, return (p); } +/* If you change this value then also change bug24640.phpt. + */ #define NDIG 80 @@ -271,6 +295,7 @@ char * ap_php_cvt(double arg, int ndigits, int *decpt, int *sign, int eflag, char *buf) { register int r2; + int mvl; double fi, fj; register char *p, *p1; @@ -290,9 +315,16 @@ ap_php_cvt(double arg, int ndigits, int *decpt, int *sign, int eflag, char *buf) */ if (fi != 0) { p1 = &buf[NDIG]; - while (p1 > &buf[0] && fi != 0) { + while (fi != 0) { fj = modf(fi / 10, &fi); - *--p1 = (int) ((fj + .03) * 10) + '0'; + if (p1 > &buf[0]) { + *--p1 = (int) ((fj + .03) * 10) + '0'; + } else { + mvl = NDIG - ndigits; + memmove(&buf[mvl], &buf[0], NDIG-mvl-1); + p1 += mvl; + *--p1 = (int) ((fj + .03) * 10) + '0'; + } r2++; } while (p1 < &buf[NDIG])