cvs: php-src /main snprintf.c spprintf.c

From: Date: Sat, 13 Sep 2003 16:49:26 +0000
Subject: cvs: php-src /main snprintf.c spprintf.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-23765@lists.php.net to get a copy of this message
helly Sat Sep 13 12:49:26 2003 EDT Modified files: /php-src/main snprintf.c spprintf.c Log: - Fix %p to prepend '0x' as suggested by C99. - Add 'z' prefix. # Now you can use '%zd' in [v]spprintf() and everything that utilizes it # like error messages BUT you still cannot rely on it in [v]s[n]printf() # calls. Index: php-src/main/snprintf.c diff -u php-src/main/snprintf.c:1.27 php-src/main/snprintf.c:1.28 --- php-src/main/snprintf.c:1.27 Fri Aug 8 15:48:33 2003 +++ php-src/main/snprintf.c Sat Sep 13 12:49:24 2003 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: snprintf.c,v 1.27 2003/08/08 19:48:33 helly Exp $ */ +/* $Id: snprintf.c,v 1.28 2003/09/13 16:49:24 helly Exp $ */ /* ==================================================================== * Copyright (c) 1995-1998 The Apache Group. All rights reserved. @@ -578,6 +578,7 @@ * Flag variables */ boolean_e is_long; + boolean_e is_size_t; boolean_e alternate_form; boolean_e print_sign; boolean_e print_blank; @@ -670,9 +671,16 @@ */ if (*fmt == 'l') { is_long = YES; + is_size_t = NO; fmt++; - } else + } else if (*fmt == 'z') { + is_size_t = YES; + is_long = NO; + fmt++; + } else { + is_size_t = NO; is_long = NO; + } /* * Argument extraction and printing. @@ -689,6 +697,8 @@ case 'u': if (is_long) i_num = va_arg(ap, u_wide_int); + else if (is_size_t) + i_num = (wide_int) va_arg(ap, size_t); else i_num = (wide_int) va_arg(ap, unsigned int); /* @@ -703,6 +713,8 @@ if ((*fmt) != 'u') { if (is_long) i_num = va_arg(ap, wide_int); + else if (is_size_t) + i_num = (wide_int) va_arg(ap, size_t); else i_num = (wide_int) va_arg(ap, int); }; @@ -724,6 +736,8 @@ case 'o': if (is_long) ui_num = va_arg(ap, u_wide_int); + else if (is_size_t) + ui_num = (u_wide_int) va_arg(ap, size_t); else ui_num = (u_wide_int) va_arg(ap, unsigned int); s = ap_php_conv_p2(ui_num, 3, *fmt, @@ -740,6 +754,8 @@ case 'X': if (is_long) ui_num = (u_wide_int) va_arg(ap, u_wide_int); + else if (is_size_t) + ui_num = (u_wide_int) va_arg(ap, size_t); else ui_num = (u_wide_int) va_arg(ap, unsigned int); s = ap_php_conv_p2(ui_num, 4, *fmt, @@ -848,12 +864,16 @@ * we print "%p" to indicate that we don't handle "%p". */ case 'p': - ui_num = (u_wide_int) va_arg(ap, char *); - - if (sizeof(char *) <= sizeof(u_wide_int)) - s = ap_php_conv_p2(ui_num, 4, 'x', - &num_buf[NUM_BUF_SIZE], &s_len); - else { + if (sizeof(char *) <= sizeof(u_wide_int)) { + ui_num = (u_wide_int) va_arg(ap, char *); + s = ap_php_conv_p2(ui_num, 4, 'x', + &num_buf[NUM_BUF_SIZE], &s_len); + if (i_num != 0) { + *--s = 'x'; + *--s = '0'; + s_len += 2; + } + } else { s = "%p"; s_len = 2; } Index: php-src/main/spprintf.c diff -u php-src/main/spprintf.c:1.16 php-src/main/spprintf.c:1.17 --- php-src/main/spprintf.c:1.16 Tue Jun 10 16:03:42 2003 +++ php-src/main/spprintf.c Sat Sep 13 12:49:24 2003 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: spprintf.c,v 1.16 2003/06/10 20:03:42 imajes Exp $ */ +/* $Id: spprintf.c,v 1.17 2003/09/13 16:49:24 helly Exp $ */ /* This is the spprintf implementation. * It has emerged from apache snprintf. See original header: @@ -187,6 +187,7 @@ * Flag variables */ boolean_e is_long; + boolean_e is_size_t; boolean_e alternate_form; boolean_e print_sign; boolean_e print_blank; @@ -276,9 +277,16 @@ */ if (*fmt == 'l') { is_long = YES; + is_size_t = NO; fmt++; - } else + } else if (*fmt == 'z') { + is_size_t = YES; + is_long = NO; + fmt++; + } else { + is_size_t = NO; is_long = NO; + } /* * Argument extraction and printing. @@ -295,6 +303,8 @@ case 'u': if (is_long) i_num = va_arg(ap, u_wide_int); + else if (is_size_t) + i_num = (wide_int) va_arg(ap, size_t); else i_num = (wide_int) va_arg(ap, unsigned int); /* @@ -309,6 +319,8 @@ if ((*fmt) != 'u') { if (is_long) i_num = va_arg(ap, wide_int); + else if (is_size_t) + i_num = (wide_int) va_arg(ap, size_t); else i_num = (wide_int) va_arg(ap, int); }; @@ -330,6 +342,8 @@ case 'o': if (is_long) ui_num = va_arg(ap, u_wide_int); + else if (is_size_t) + ui_num = (u_wide_int) va_arg(ap, size_t); else ui_num = (u_wide_int) va_arg(ap, unsigned int); s = ap_php_conv_p2(ui_num, 3, *fmt, @@ -344,8 +358,13 @@ case 'x': case 'X': + /* + * Get the arg if we haven't already. + */ if (is_long) ui_num = (u_wide_int) va_arg(ap, u_wide_int); + else if (is_size_t) + ui_num = (u_wide_int) va_arg(ap, size_t); else ui_num = (u_wide_int) va_arg(ap, unsigned int); s = ap_php_conv_p2(ui_num, 4, *fmt, @@ -454,11 +473,16 @@ * we print "%p" to indicate that we don't handle "%p". */ case 'p': - ui_num = (u_wide_int) va_arg(ap, char *); - - if (sizeof(char *) <= sizeof(u_wide_int)) - s = ap_php_conv_p2(ui_num, 4, 'x', &num_buf[NUM_BUF_SIZE], &s_len); - else { + if (sizeof(char *) <= sizeof(u_wide_int)) { + ui_num = (u_wide_int) va_arg(ap, char *); + s = ap_php_conv_p2(ui_num, 4, 'x', + &num_buf[NUM_BUF_SIZE], &s_len); + if (i_num != 0) { + *--s = 'x'; + *--s = '0'; + s_len += 2; + } + } else { s = "%p"; s_len = 2; }

« previous php.cvs (#23765) next »