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;
}-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
