]> granicus.if.org Git - php/commitdiff
- Reversed 'fix' for #9698
authorDerick Rethans <derick@php.net>
Sun, 20 May 2001 00:23:49 +0000 (00:23 +0000)
committerDerick Rethans <derick@php.net>
Sun, 20 May 2001 00:23:49 +0000 (00:23 +0000)
- Fix for bug #9698/#10681 (patch by kettler@gmx.net)
@- Added the 'u' modifier to printf/sprintf which prints unsigned longs.
@  (Derick)

ext/standard/basic_functions.c
ext/standard/formatted_print.c

index c55aa1d422a43cc8c4a02ef1870146599cc76b11..d541627e0eb3051738d6968350e0987e06a9ceea 100644 (file)
@@ -960,7 +960,6 @@ PHP_FUNCTION(constant)
 PHP_FUNCTION(ip2long)
 {
        zval **str;
-       char tmp_buff[16];
 
        if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) == FAILURE) {
                WRONG_PARAM_COUNT;
@@ -968,9 +967,7 @@ PHP_FUNCTION(ip2long)
 
        convert_to_string_ex(str);
 
-       sprintf(tmp_buff, "%u", ntohl(inet_addr(Z_STRVAL_PP(str))));
-
-       RETURN_STRING(tmp_buff,1);
+       RETURN_LONG(ntohl(inet_addr(Z_STRVAL_PP(str))));
 }
 /* }}} */
 
index ec89a0b2c020dd8f82d7a19296bd658b9da71611..e5e5708c929e53c5a56cd3e29c67716b612ba59c 100644 (file)
@@ -232,6 +232,33 @@ php_sprintf_appendint(char **buffer, int *pos, int *size, int number,
                                                         neg, 0);
 }
 
+inline static void
+php_sprintf_appenduint(char **buffer, int *pos, int *size, int number,
+                                               int width, char padding, int alignment)
+{
+       char numbuf[NUM_BUF_SIZE];
+       register unsigned int magn, nmagn, i = NUM_BUF_SIZE - 1;
+
+       PRINTF_DEBUG(("sprintf: appenduint(%x, %x, %x, %d, %d, '%c', %d)\n",
+                                 *buffer, pos, size, number, width, padding, alignment));
+       magn = (unsigned int) number;
+
+       /* Can't right-pad 0's on integers */
+       if (alignment == 0 && padding == '0') padding = ' ';
+
+       numbuf[i] = '\0';
+
+       do {
+               nmagn = magn / 10;
+
+               numbuf[--i] = (magn - (nmagn * 10)) + '0';
+               magn = nmagn;
+       }
+       while (magn > 0 && i > 0);
+       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);
+}
 
 inline static void
 php_sprintf_appenddouble(char **buffer, int *pos,
@@ -528,6 +555,13 @@ php_formatted_print(int ht, int *len)
                                                                                  width, padding, alignment);
                                        break;
 
+                               case 'u':
+                                       convert_to_long_ex(args[argnum]);
+                                       php_sprintf_appenduint(&result, &outpos, &size,
+                                                                                 (*args[argnum])->value.lval,
+                                                                                 width, padding, alignment);
+                                       break;
+
                                case 'e':
                                case 'f':
                                        /* XXX not done */