From: Derick Rethans Date: Sun, 20 May 2001 00:23:49 +0000 (+0000) Subject: - Reversed 'fix' for #9698 X-Git-Tag: PRE_GRANULAR_GARBAGE_FIX~336 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=dc43b9f574804d836ef2905b41a2ef0420f2a0f5;p=php - Reversed 'fix' for #9698 - Fix for bug #9698/#10681 (patch by kettler@gmx.net) @- Added the 'u' modifier to printf/sprintf which prints unsigned longs. @ (Derick) --- diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index c55aa1d422..d541627e0e 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -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)))); } /* }}} */ diff --git a/ext/standard/formatted_print.c b/ext/standard/formatted_print.c index ec89a0b2c0..e5e5708c92 100644 --- a/ext/standard/formatted_print.c +++ b/ext/standard/formatted_print.c @@ -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 */