Re: cvs: php4 /main snprintf.c snprintf.h
| From: | Edin Kadribasic | Date: | Tue, 07 May 2002 13:15:52 +0000 |
| Subject: | Re: cvs: php4 /main snprintf.c snprintf.h | ||
| References: | 1 | Groups: | php.cvs |
| Request: | Send a blank email to php-cvs+get-11735@lists.php.net to get a copy of this message | ||
This broke win32 build:
snprintf.c
c:\php4build\snap\main\snprintf.c(150) : error C2065: 'NDIG' : undeclared
identifier
c:\php4build\snap\main\snprintf.c(150) : error C2057: expected constant
expression
c:\php4build\snap\main\snprintf.c(150) : error C2466: cannot allocate an
array of constant size 0
c:\php4build\snap\main\snprintf.c(150) : error C2133: 'buf1' : unknown size
c:\php4build\snap\main\snprintf.c(153) : warning C4020: 'fcvt' : too many
actual parameters
c:\php4build\snap\main\snprintf.c(155) : warning C4020: 'ecvt' : too many
actual parameters
Edin
----- Original Message -----
From: "Sascha Schumann" <sascha@schumann.cx>
To: <php-cvs@lists.php.net>
Sent: Tuesday, May 07, 2002 7:26 AM
Subject: [PHP-CVS] cvs: php4 /main snprintf.c snprintf.h
> sas Tue May 7 01:26:30 2002 EDT
>
> Modified files:
> /php4/main snprintf.h snprintf.c
> Log:
> Add thread-safety to some conversion functions and sync a bit with
> APR.
>
>
> Index: php4/main/snprintf.h
> diff -u php4/main/snprintf.h:1.15 php4/main/snprintf.h:1.16
> --- php4/main/snprintf.h:1.15 Tue Apr 9 21:07:49 2002
> +++ php4/main/snprintf.h Tue May 7 01:26:30 2002
> @@ -34,6 +34,10 @@
> #define sprintf php_sprintf
> #endif
>
> +typedef enum {
> + NO = 0, YES = 1
> +} boolean_e;
> +
> #ifdef HAVE_GCVT
>
> #define ap_php_ecvt ecvt
> @@ -42,16 +46,12 @@
>
> #else
>
> -extern char * ap_php_cvt(double arg, int ndigits, int *decpt, int *sign,
int eflag);
> -extern char * ap_php_ecvt(double arg, int ndigits, int *decpt, int
*sign);
> -extern char * ap_php_fcvt(double arg, int ndigits, int *decpt, int
*sign);
> -extern char * ap_php_gcvt(double number, int ndigit, char *buf);
> +extern char * ap_php_cvt(double arg, int ndigits, int *decpt, int *sign,
int eflag, char *buf);
> +extern char * ap_php_ecvt(double arg, int ndigits, int *decpt, int *sign,
char *buf);
> +extern char * ap_php_fcvt(double arg, int ndigits, int *decpt, int *sign,
char *buf);
> +extern char * ap_php_gcvt(double number, int ndigit, char *buf, boolean_e
altform);
>
> #endif
> -
> -typedef enum {
> - NO = 0, YES = 1
> -} boolean_e;
>
> #define WIDE_INT long
> typedef WIDE_INT wide_int;
> Index: php4/main/snprintf.c
> diff -u php4/main/snprintf.c:1.13 php4/main/snprintf.c:1.14
> --- php4/main/snprintf.c:1.13 Thu Apr 11 03:28:24 2002
> +++ php4/main/snprintf.c Tue May 7 01:26:30 2002
> @@ -88,7 +88,7 @@
> * is declared as buf[ 100 ], buf_end should be &buf[ 100 ])
> */
> char *
> - ap_php_conv_10(register wide_int num, register bool_int is_unsigned,
> +ap_php_conv_10(register wide_int num, register bool_int is_unsigned,
> register bool_int * is_negative, char *buf_end, register int *len)
> {
> register char *p = buf_end;
> @@ -147,17 +147,19 @@
> register char *s = buf;
> register char *p;
> int decimal_point;
> + char buf1[NDIG];
>
> if (format == 'f')
> - p = ap_php_fcvt(num, precision, &decimal_point, is_negative);
> + p = ap_php_fcvt(num, precision, &decimal_point, is_negative, buf1);
> else /* either e or E format */
> - p = ap_php_ecvt(num, precision + 1, &decimal_point, is_negative);
> + p = ap_php_ecvt(num, precision + 1, &decimal_point, is_negative, buf1);
>
> /*
> * Check for Infinity and NaN
> */
> if (isalpha((int)*p)) {
> - *len = strlen(strcpy(buf, p));
> + *len = strlen(p);
> + memcpy(buf, p, *len + 1);
> *is_negative = FALSE;
> return (buf);
> }
> @@ -274,12 +276,11 @@
> #define NDIG 80
>
> char *
> - ap_php_cvt(double arg, int ndigits, int *decpt, int *sign, int eflag)
> +ap_php_cvt(double arg, int ndigits, int *decpt, int *sign, int eflag,
char *buf)
> {
> register int r2;
> double fi, fj;
> register char *p, *p1;
> - static char buf[NDIG];
>
> if (ndigits >= NDIG - 1)
> ndigits = NDIG - 2;
> @@ -319,8 +320,7 @@
> return (buf);
> }
> while (p <= p1 && p < &buf[NDIG]) {
> - arg *= 10;
> - arg = modf(arg, &fj);
> + arg = modf(arg * 10, &fj);
> *p++ = (int) fj + '0';
> }
> if (p1 >= &buf[NDIG]) {
> @@ -348,15 +348,15 @@
> }
>
> char *
> - ap_php_ecvt(double arg, int ndigits, int *decpt, int *sign)
> +ap_php_ecvt(double arg, int ndigits, int *decpt, int *sign, char *buf)
> {
> - return (ap_php_cvt(arg, ndigits, decpt, sign, 1));
> + return (ap_php_cvt(arg, ndigits, decpt, sign, 1, buf));
> }
>
> char *
> - ap_php_fcvt(double arg, int ndigits, int *decpt, int *sign)
> +ap_php_fcvt(double arg, int ndigits, int *decpt, int *sign, char *buf)
> {
> - return (ap_php_cvt(arg, ndigits, decpt, sign, 0));
> + return (ap_php_cvt(arg, ndigits, decpt, sign, 0, buf));
> }
>
> /*
> @@ -365,13 +365,14 @@
> */
>
> char *
> - ap_php_gcvt(double number, int ndigit, char *buf)
> +ap_php_gcvt(double number, int ndigit, char *buf, boolean_e altform)
> {
> int sign, decpt;
> register char *p1, *p2;
> register i;
> + char buf1[NDIG];
>
> - p1 = ap_php_ecvt(number, ndigit, &decpt, &sign);
> + p1 = ap_php_ecvt(number, ndigit, &decpt, &sign, buf1);
> p2 = buf;
> if (sign)
> *p2++ = '-';
> @@ -415,7 +416,7 @@
> *p2++ = '.';
> }
> }
> - if (p2[-1] == '.')
> + if (p2[-1] == '.' && !altform)
> p2--;
> *p2 = '\0';
> return (buf);
> @@ -762,7 +763,8 @@
> /*
> * * We use &num_buf[ 1 ], so that we have room for the sign
> */
> - s = ap_php_gcvt(va_arg(ap, double), precision, &num_buf[1]);
> + s = ap_php_gcvt(va_arg(ap, double), precision, &num_buf[1],
> + alternate_form);
> if (*s == '-')
> prefix_char = *s++;
> else if (print_sign)
>
>
>
> --
> PHP CVS Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>
>