sniper          Tue Jan 20 23:00:08 2004 EDT

  Modified files:              
    /php-src/ext/standard       formatted_print.c 
  Log:
  - Fixed bug #26973 (*printf() + modifier broken)
  
http://cvs.php.net/diff.php/php-src/ext/standard/formatted_print.c?r1=1.72&r2=1.73&ty=u
Index: php-src/ext/standard/formatted_print.c
diff -u php-src/ext/standard/formatted_print.c:1.72 
php-src/ext/standard/formatted_print.c:1.73
--- php-src/ext/standard/formatted_print.c:1.72 Tue Jan 13 18:11:29 2004
+++ php-src/ext/standard/formatted_print.c      Tue Jan 20 23:00:07 2004
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: formatted_print.c,v 1.72 2004/01/13 23:11:29 iliaa Exp $ */
+/* $Id: formatted_print.c,v 1.73 2004/01/21 04:00:07 sniper Exp $ */
 
 #include <math.h>                              /* modf() */
 #include "php.h"
@@ -155,7 +155,7 @@
 inline static void
 php_sprintf_appendstring(char **buffer, int *pos, int *size, char *add,
                                                   int min_width, int max_width, char 
padding,
-                                                  int alignment, int len, int sign, 
int expprec)
+                                                  int alignment, int len, int neg, 
int expprec, int always_sign)
 {
        register int npad;
        int req_size;
@@ -181,8 +181,8 @@
                *buffer = erealloc(*buffer, *size);
        }
        if (alignment == ALIGN_RIGHT) {
-               if (sign && padding=='0') {
-                       (*buffer)[(*pos)++] = '-';
+               if ((neg || always_sign) && padding=='0') {
+                       (*buffer)[(*pos)++] = (neg) ? '-' : '+';
                        add++;
                        len--;
                        copy_len--;
@@ -241,13 +241,13 @@
                                  number, &numbuf[i], i));
        php_sprintf_appendstring(buffer, pos, size, &numbuf[i], width, 0,
                                                         padding, alignment, 
(NUM_BUF_SIZE - 1) - i,
-                                                        neg, 0);
+                                                        neg, 0, always_sign);
 }
 
 inline static void
 php_sprintf_appenduint(char **buffer, int *pos, int *size,
                                           unsigned long number,
-                                          int width, char padding, int alignment, int 
always_sign)
+                                          int width, char padding, int alignment)
 {
        char numbuf[NUM_BUF_SIZE];
        register unsigned long magn, nmagn;
@@ -269,11 +269,9 @@
                magn = nmagn;
        } while (magn > 0 && i > 0);
 
-       if (always_sign)
-               numbuf[--i] = '+';
        PRINTF_DEBUG(("sprintf: appending %d as \"%s\", i=%d\n", number, &numbuf[i], 
i));
        php_sprintf_appendstring(buffer, pos, size, &numbuf[i], width, 0,
-                                                        padding, alignment, 
(NUM_BUF_SIZE - 1) - i, 0, 0);
+                                                        padding, alignment, 
(NUM_BUF_SIZE - 1) - i, 0, 0, 0);
 }
 
 inline static void
@@ -302,14 +300,14 @@
        if (zend_isnan(number)) {
                sign = (number<0);
                php_sprintf_appendstring(buffer, pos, size, "NaN", 3, 0, padding,
-                                                                alignment, precision, 
sign, 0);
+                                                                alignment, precision, 
sign, 0, always_sign);
                return;
        }
 
        if (zend_isinf(number)) {
                sign = (number<0);
                php_sprintf_appendstring(buffer, pos, size, "INF", 3, 0, padding,
-                                                                alignment, precision, 
sign, 0);
+                                                                alignment, precision, 
sign, 0, always_sign);
                return;
        }
 
@@ -382,7 +380,7 @@
                width += (precision + 1);
        }
        php_sprintf_appendstring(buffer, pos, size, numbuf, width, 0, padding,
-                                                        alignment, i, sign, 0);
+                                                        alignment, i, sign, 0, 
always_sign);
 }
 
 
@@ -412,7 +410,7 @@
 
        php_sprintf_appendstring(buffer, pos, size, &numbuf[i], width, 0,
                                                         padding, alignment, 
(NUM_BUF_SIZE - 1) - i,
-                                                        0, expprec);
+                                                        0, expprec, 0);
 }
 
 
@@ -647,7 +645,7 @@
                                                                                       
  width, precision, padding,
                                                                                       
  alignment,
                                                                                       
  Z_STRLEN_P(var),
-                                                                                      
  0, expprec);
+                                                                                      
  0, expprec, 0);
                                        if (use_copy) {
                                                zval_dtor(&var_copy);
                                        }
@@ -666,8 +664,7 @@
                                        convert_to_long(tmp);
                                        php_sprintf_appenduint(&result, &outpos, &size,
                                                                                  
Z_LVAL_P(tmp),
-                                                                                 
width, padding, alignment,
-                                                                                 
always_sign);
+                                                                                 
width, padding, alignment);
                                        break;
 
                                case 'e':

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to