sas Sat Sep 21 11:08:59 2002 EDT Modified files: /php4/ext/standard formatted_print.c Log: Add '+' modifier. + A sign (+ or -) always be placed before a number produced by a signed conversion. By default a sign is used only for negative numbers. A + overrides a space if both are used. Index: php4/ext/standard/formatted_print.c diff -u php4/ext/standard/formatted_print.c:1.52 php4/ext/standard/formatted_print.c:1.53 --- php4/ext/standard/formatted_print.c:1.52 Fri Aug 23 21:19:28 2002 +++ php4/ext/standard/formatted_print.c Sat Sep 21 11:08:59 2002 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: formatted_print.c,v 1.52 2002/08/24 01:19:28 helly Exp $ */ +/* $Id: formatted_print.c,v 1.53 2002/09/21 15:08:59 sas Exp $ */ #include <math.h> /* modf() */ #include "php.h" @@ -200,7 +200,8 @@ inline static void php_sprintf_appendint(char **buffer, int *pos, int *size, long number, - int width, char padding, int alignment) + int width, char padding, int +alignment, + int always_sign) { char numbuf[NUM_BUF_SIZE]; register unsigned long magn, nmagn; @@ -229,6 +230,8 @@ while (magn > 0 && i > 0); if (neg) { numbuf[--i] = '-'; + } else if (always_sign) { + numbuf[--i] = '+'; } PRINTF_DEBUG(("sprintf: appending %d as \"%s\", i=%d\n", number, &numbuf[i], i)); @@ -240,7 +243,7 @@ inline static void php_sprintf_appenduint(char **buffer, int *pos, int *size, unsigned long number, - int width, char padding, int alignment) + int width, char padding, int alignment, int +always_sign) { char numbuf[NUM_BUF_SIZE]; register unsigned long magn, nmagn; @@ -260,8 +263,10 @@ numbuf[--i] = (unsigned char)(magn - (nmagn * 10)) + '0'; magn = nmagn; - } - while (magn > 0 && i > 0); + } 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); @@ -272,7 +277,8 @@ int *size, double number, int width, char padding, int alignment, int precision, - int adjust, char fmt) + int adjust, char fmt, + int always_sign) { char numbuf[NUM_BUF_SIZE]; char *cvt; @@ -313,6 +319,8 @@ if (sign) { numbuf[i++] = '-'; + } else if (always_sign) { + numbuf[i++] = '+'; } if (fmt == 'f') { @@ -405,6 +413,7 @@ * "-" left adjusted field * n field size * "."n precision (floats only) + * "+" Always place a sign (+ or -) in front of a number * * Type specifiers: * @@ -426,6 +435,7 @@ int argc, size = 240, inpos = 0, outpos = 0, temppos; int alignment, width, precision, currarg, adjusting, argnum; char *format, *result, padding; + int always_sign; argc = ZEND_NUM_ARGS(); @@ -482,6 +492,7 @@ alignment = ALIGN_RIGHT; adjusting = 0; padding = ' '; + always_sign = 0; inpos++; /* skip the '%' */ PRINTF_DEBUG(("sprintf: first looking at '%c', inpos=%d\n", @@ -521,6 +532,8 @@ } else if (format[inpos] == '-') { alignment = ALIGN_LEFT; /* space padding, the default */ + } else if (format[inpos] == '+') { + always_sign = 1; } else if (format[inpos] == '\'') { padding = format[++inpos]; } else { @@ -583,14 +596,16 @@ convert_to_long_ex(args[argnum]); php_sprintf_appendint(&result, &outpos, &size, Z_LVAL_PP(args[argnum]), - width, padding, alignment); + +width, padding, alignment, + +always_sign); break; case 'u': convert_to_long_ex(args[argnum]); php_sprintf_appenduint(&result, &outpos, &size, Z_LVAL_PP(args[argnum]), - width, padding, alignment); + +width, padding, alignment, + +always_sign); break; case 'e': @@ -601,7 +616,7 @@ Z_DVAL_PP(args[argnum]), width, padding, alignment, precision, adjusting, - format[inpos]); + + format[inpos], always_sign); break; case 'c':
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php