helly Sun Sep 14 05:12:55 2003 EDT
Modified files:
/php-src configure.in
/php-src/main config.w32.h snprintf.c snprintf.h spprintf.c
Log:
- Add length modifiers(ll, j, t, h, hh)
# Still missing formats (%a, %A)
# Still missing modifier (l) in (%lc, %ls)
# Still missing modifier (L) in (%La, %LA, %Le, %LE, %Lf, %LF, %Lg, %LG)
# C99 requires any conversion to be able to produce at least 4095
# characters. Implementation only allows less then 512.
#
# Only inside ext/mbstring etc. we could use %lc and %ls. And none of the
# rest should affect us until we stay with double and avoid long double.
Index: php-src/configure.in
diff -u php-src/configure.in:1.464 php-src/configure.in:1.465
--- php-src/configure.in:1.464 Mon Sep 8 09:15:22 2003
+++ php-src/configure.in Sun Sep 14 05:12:54 2003
@@ -1,4 +1,4 @@
-dnl ## $Id: configure.in,v 1.464 2003/09/08 13:15:22 sniper Exp $ -*- sh -*-
+dnl ## $Id: configure.in,v 1.465 2003/09/14 09:12:54 helly Exp $ -*- sh -*-
dnl ## Process this file with autoconf to produce a configure script.
divert(1)
@@ -401,6 +401,12 @@
PHP_STRUCT_FLOCK
PHP_SOCKLEN_T
+AC_CHECK_SIZEOF(intmax_t, 0)
+AC_CHECK_SIZEOF(size_t, 8)
+AC_CHECK_SIZEOF(ssize_t, 8)
+AC_CHECK_SIZEOF(ptrdiff_t, 8)
+AC_CHECK_SIZEOF(long long, 8)
+AC_CHECK_SIZEOF(long long int, 8)
AC_CHECK_SIZEOF(long, 8)
AC_CHECK_SIZEOF(int, 4)
@@ -1166,7 +1172,8 @@
zend_ini.c zend_qsort.c zend_multibyte.c zend_ts_hash.c zend_stream.c)
if test -r "$abs_srcdir/Zend/zend_objects.c"; then
- PHP_ADD_SOURCES(Zend, zend_objects.c zend_object_handlers.c zend_objects_API.c
zend_mm.c zend_default_classes.c zend_reflection_api.c)
+ PHP_ADD_SOURCES(Zend, zend_objects.c zend_object_handlers.c zend_objects_API.c
zend_mm.c \
+ zend_default_classes.c zend_reflection_api.c zend_interfaces.c)
fi
dnl Selectively disable optimization due to high RAM usage during
Index: php-src/main/config.w32.h
diff -u php-src/main/config.w32.h:1.77 php-src/main/config.w32.h:1.78
--- php-src/main/config.w32.h:1.77 Mon Aug 25 22:50:39 2003
+++ php-src/main/config.w32.h Sun Sep 14 05:12:54 2003
@@ -2,7 +2,7 @@
Build Configuration for Win32.
This has only been tested with MS VisualC++ 6 (and later).
- $Id: config.w32.h,v 1.77 2003/08/26 02:50:39 sniper Exp $
+ $Id: config.w32.h,v 1.78 2003/09/14 09:12:54 helly Exp $
*/
/* Default PHP / PEAR directories */
@@ -167,7 +167,21 @@
#define HAVE_CUSERID 0
#undef HAVE_RINT
#define HAVE_STRFTIME 1
+/* int and long are stll 32bit in 64bit compiles */
#define SIZEOF_INT 4
+#define SIZEOF_LONG 4
+/* MSVC.6/NET don't allow 'long long' or know 'intmax_t' */
+#define SIZEOF_LONG_LONG_INT 0
+#define SIZEOF_LONG_LONG 0
+#define SIZEOF_INTMAX_T 0
+#define ssize_t ptrdiff_t
+#ifdef _WIN64
+# define SIZEOF_SIZE_T 8
+# define SIZEOF_PTRDIFF_T 8
+#else
+# define SIZEOF_SIZE_T 4
+# define SIZEOF_PTRDIFF_T 4
+#endif
#define HAVE_GLOB
#define PHP_SHLIB_SUFFIX "dll"
#define HAVE_SQLDATASOURCES
Index: php-src/main/snprintf.c
diff -u php-src/main/snprintf.c:1.28 php-src/main/snprintf.c:1.29
--- php-src/main/snprintf.c:1.28 Sat Sep 13 12:49:24 2003
+++ php-src/main/snprintf.c Sun Sep 14 05:12:54 2003
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: snprintf.c,v 1.28 2003/09/13 16:49:24 helly Exp $ */
+/* $Id: snprintf.c,v 1.29 2003/09/14 09:12:54 helly Exp $ */
/* ====================================================================
* Copyright (c) 1995-1998 The Apache Group. All rights reserved.
@@ -75,6 +75,7 @@
#include "php.h"
+#include <stddef.h>
#include <stdio.h>
#include <ctype.h>
#include <sys/types.h>
@@ -577,8 +578,7 @@
/*
* Flag variables
*/
- boolean_e is_long;
- boolean_e is_size_t;
+ length_modifier_e modifier;
boolean_e alternate_form;
boolean_e print_sign;
boolean_e print_blank;
@@ -669,17 +669,43 @@
/*
* Modifier check
*/
- if (*fmt == 'l') {
- is_long = YES;
- is_size_t = NO;
- fmt++;
- } else if (*fmt == 'z') {
- is_size_t = YES;
- is_long = NO;
- fmt++;
- } else {
- is_size_t = NO;
- is_long = NO;
+ switch (*fmt) {
+ case 'l':
+ fmt++;
+#if SIZEOF_LONG_LONG
+ if (*fmt == 'l') {
+ fmt++;
+ modifier = LM_LONG_LONG;
+ } else
+#endif
+ modifier = LM_LONG;
+ break;
+ case 'z':
+ modifier = LM_SIZE_T;
+ break;
+ case 'j':
+#if SIZEOF_INTMAX_T
+ modifier = LM_INTMAX_T;
+#else
+ modifier = LM_SIZE_T;
+#endif
+ break;
+ case 't':
+#if SIZEOF_PTRDIFF_T
+ modifier = LM_PTRDIFF_T;
+#else
+ modifier = LM_SIZE_T;
+#endif
+ break;
+ case 'h':
+ fmt++;
+ if (*fmt == 'h') {
+ fmt++;
+ }
+ /* these are promoted to int, so no break */
+ default:
+ modifier = LM_STD;
+ break;
}
/*
@@ -695,12 +721,32 @@
*/
switch (*fmt) {
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);
+ switch(modifier) {
+ default:
+ i_num = (wide_int) va_arg(ap,
unsigned int);
+ break;
+ case LM_LONG:
+ i_num = (wide_int) va_arg(ap,
unsigned long int);
+ break;
+ case LM_SIZE_T:
+ i_num = (wide_int) va_arg(ap,
size_t);
+ break;
+#if SIZEOF_LONG_LONG
+ case LM_LONG_LONG:
+ i_num = (wide_int) va_arg(ap,
u_wide_int);
+ break;
+#endif
+#if SIZEOF_INTMAX_T
+ case LM_INTMAX_T:
+ i_num = (wide_int) va_arg(ap,
uintmax_t);
+ break;
+#endif
+#if SIZEOF_PTRDIFF_T
+ case LM_PTRDIFF_T:
+ i_num = (wide_int) va_arg(ap,
ptrdiff_t);
+ break;
+#endif
+ }
/*
* The rest also applies to other integer
formats, so fall
* into that case.
@@ -711,13 +757,37 @@
* Get the arg if we haven't already.
*/
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);
- };
+ switch(modifier) {
+ default:
+ i_num = (wide_int)
va_arg(ap, int);
+ break;
+ case LM_LONG:
+ i_num = (wide_int)
va_arg(ap, long int);
+ break;
+ case LM_SIZE_T:
+#if SIZEOF_SSIZE_T
+ i_num = (wide_int)
va_arg(ap, ssize_t);
+#else
+ i_num = (wide_int)
va_arg(ap, size_t);
+#endif
+ break;
+#if SIZEOF_LONG_LONG
+ case LM_LONG_LONG:
+ i_num = (wide_int)
va_arg(ap, wide_int);
+ break;
+#endif
+#if SIZEOF_INTMAX_T
+ case LM_INTMAX_T:
+ i_num = (wide_int)
va_arg(ap, intmax_t);
+ break;
+#endif
+#if SIZEOF_PTRDIFF_T
+ case LM_PTRDIFF_T:
+ i_num = (wide_int)
va_arg(ap, ptrdiff_t);
+ break;
+#endif
+ }
+ }
s = ap_php_conv_10(i_num, (*fmt) == 'u',
&is_negative,
&num_buf[NUM_BUF_SIZE], &s_len);
FIX_PRECISION(adjust_precision, precision, s,
s_len);
@@ -734,12 +804,32 @@
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);
+ switch(modifier) {
+ default:
+ ui_num = (u_wide_int)
va_arg(ap, unsigned int);
+ break;
+ case LM_LONG:
+ ui_num = (u_wide_int)
va_arg(ap, unsigned long int);
+ break;
+ case LM_SIZE_T:
+ ui_num = (u_wide_int)
va_arg(ap, size_t);
+ break;
+#if SIZEOF_LONG_LONG
+ case LM_LONG_LONG:
+ ui_num = (u_wide_int)
va_arg(ap, u_wide_int);
+ break;
+#endif
+#if SIZEOF_INTMAX_T
+ case LM_INTMAX_T:
+ ui_num = (u_wide_int)
va_arg(ap, uintmax_t);
+ break;
+#endif
+#if SIZEOF_PTRDIFF_T
+ case LM_PTRDIFF_T:
+ ui_num = (u_wide_int)
va_arg(ap, ptrdiff_t);
+ break;
+#endif
+ }
s = ap_php_conv_p2(ui_num, 3, *fmt,
&num_buf[NUM_BUF_SIZE], &s_len);
FIX_PRECISION(adjust_precision, precision, s,
s_len);
@@ -752,12 +842,32 @@
case 'x':
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);
+ switch(modifier) {
+ default:
+ ui_num = (u_wide_int)
va_arg(ap, unsigned int);
+ break;
+ case LM_LONG:
+ ui_num = (u_wide_int)
va_arg(ap, unsigned long int);
+ break;
+ case LM_SIZE_T:
+ ui_num = (u_wide_int)
va_arg(ap, size_t);
+ break;
+#if SIZEOF_LONG_LONG
+ case LM_LONG_LONG:
+ ui_num = (u_wide_int)
va_arg(ap, u_wide_int);
+ break;
+#endif
+#if SIZEOF_INTMAX_T
+ case LM_INTMAX_T:
+ ui_num = (u_wide_int)
va_arg(ap, uintmax_t);
+ break;
+#endif
+#if SIZEOF_PTRDIFF_T
+ case LM_PTRDIFF_T:
+ ui_num = (u_wide_int)
va_arg(ap, ptrdiff_t);
+ break;
+#endif
+ }
s = ap_php_conv_p2(ui_num, 4, *fmt,
&num_buf[NUM_BUF_SIZE], &s_len);
FIX_PRECISION(adjust_precision, precision, s,
s_len);
@@ -865,7 +975,7 @@
*/
case 'p':
if (sizeof(char *) <= sizeof(u_wide_int)) {
- ui_num = (u_wide_int) va_arg(ap, char
*);
+ ui_num = (u_wide_int)((size_t)
va_arg(ap, char *));
s = ap_php_conv_p2(ui_num, 4, 'x',
&num_buf[NUM_BUF_SIZE], &s_len);
if (i_num != 0) {
Index: php-src/main/snprintf.h
diff -u php-src/main/snprintf.h:1.24 php-src/main/snprintf.h:1.25
--- php-src/main/snprintf.h:1.24 Thu Aug 28 01:23:08 2003
+++ php-src/main/snprintf.h Sun Sep 14 05:12:54 2003
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: snprintf.h,v 1.24 2003/08/28 05:23:08 sas Exp $ */
+/* $Id: snprintf.h,v 1.25 2003/09/14 09:12:54 helly Exp $ */
/*
@@ -83,12 +83,35 @@
NO = 0, YES = 1
} boolean_e;
+typedef enum {
+ LM_STD = 0,
+#if SIZEOF_INTMAX_T
+ LM_INTMAX_T,
+#endif
+#if SIZEOF_PTRDIFF_T
+ LM_PTRDIFF_T,
+#endif
+#if SIZEOF_LONG_LONG
+ LM_LONG_LONG,
+#endif
+ LM_SIZE_T,
+ LM_LONG
+} length_modifier_e;
+
extern char * ap_php_cvt(double arg, int ndigits, int *decpt, int *sign, int eflag,
char *buf);
extern char * ap_php_ecvt(double arg, int ndigits, int *decpt, int *sign, char *buf);
extern char * ap_php_fcvt(double arg, int ndigits, int *decpt, int *sign, char *buf);
extern char * ap_php_gcvt(double number, int ndigit, char *buf, boolean_e altform);
-#define WIDE_INT long
+#if SIZEOF_LONG_LONG_INT
+# define WIDE_INT long long int
+#elif SIZEOF_LONG_LONG
+# define WIDE_INT long long
+#elif _WIN64
+# define WIDE_INT __int64
+#else
+# define WIDE_INT long
+#endif
typedef WIDE_INT wide_int;
typedef unsigned WIDE_INT u_wide_int;
Index: php-src/main/spprintf.c
diff -u php-src/main/spprintf.c:1.17 php-src/main/spprintf.c:1.18
--- php-src/main/spprintf.c:1.17 Sat Sep 13 12:49:24 2003
+++ php-src/main/spprintf.c Sun Sep 14 05:12:54 2003
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: spprintf.c,v 1.17 2003/09/13 16:49:24 helly Exp $ */
+/* $Id: spprintf.c,v 1.18 2003/09/14 09:12:54 helly Exp $ */
/* This is the spprintf implementation.
* It has emerged from apache snprintf. See original header:
@@ -78,6 +78,16 @@
*/
#include "php.h"
+
+#include <stddef.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <sys/types.h>
+#include <stdarg.h>
+#include <string.h>
+#include <stdlib.h>
+#include <math.h>
+
#include "snprintf.h"
#define FALSE 0
@@ -186,8 +196,7 @@
/*
* Flag variables
*/
- boolean_e is_long;
- boolean_e is_size_t;
+ length_modifier_e modifier;
boolean_e alternate_form;
boolean_e print_sign;
boolean_e print_blank;
@@ -275,17 +284,43 @@
/*
* Modifier check
*/
- if (*fmt == 'l') {
- is_long = YES;
- is_size_t = NO;
- fmt++;
- } else if (*fmt == 'z') {
- is_size_t = YES;
- is_long = NO;
- fmt++;
- } else {
- is_size_t = NO;
- is_long = NO;
+ switch (*fmt) {
+ case 'l':
+ fmt++;
+#if SIZEOF_LONG_LONG
+ if (*fmt == 'l') {
+ fmt++;
+ modifier = LM_LONG_LONG;
+ } else
+#endif
+ modifier = LM_LONG;
+ break;
+ case 'z':
+ modifier = LM_SIZE_T;
+ break;
+ case 'j':
+#if SIZEOF_INTMAX_T
+ modifier = LM_INTMAX_T;
+#else
+ modifier = LM_SIZE_T;
+#endif
+ break;
+ case 't':
+#if SIZEOF_PTRDIFF_T
+ modifier = LM_PTRDIFF_T;
+#else
+ modifier = LM_SIZE_T;
+#endif
+ break;
+ case 'h':
+ fmt++;
+ if (*fmt == 'h') {
+ fmt++;
+ }
+ /* these are promoted to int, so no break */
+ default:
+ modifier = LM_STD;
+ break;
}
/*
@@ -301,12 +336,32 @@
*/
switch (*fmt) {
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);
+ switch(modifier) {
+ default:
+ i_num = (wide_int) va_arg(ap,
unsigned int);
+ break;
+ case LM_LONG:
+ i_num = (wide_int) va_arg(ap,
unsigned long int);
+ break;
+ case LM_SIZE_T:
+ i_num = (wide_int) va_arg(ap,
size_t);
+ break;
+#if SIZEOF_LONG_LONG
+ case LM_LONG_LONG:
+ i_num = (wide_int) va_arg(ap,
u_wide_int);
+ break;
+#endif
+#if SIZEOF_INTMAX_T
+ case LM_INTMAX_T:
+ i_num = (wide_int) va_arg(ap,
uintmax_t);
+ break;
+#endif
+#if SIZEOF_PTRDIFF_T
+ case LM_PTRDIFF_T:
+ i_num = (wide_int) va_arg(ap,
ptrdiff_t);
+ break;
+#endif
+ }
/*
* The rest also applies to other integer
formats, so fall
* into that case.
@@ -317,13 +372,37 @@
* Get the arg if we haven't already.
*/
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);
- };
+ switch(modifier) {
+ default:
+ i_num = (wide_int)
va_arg(ap, int);
+ break;
+ case LM_LONG:
+ i_num = (wide_int)
va_arg(ap, long int);
+ break;
+ case LM_SIZE_T:
+#if SIZEOF_SSIZE_T
+ i_num = (wide_int)
va_arg(ap, ssize_t);
+#else
+ i_num = (wide_int)
va_arg(ap, size_t);
+#endif
+ break;
+#if SIZEOF_LONG_LONG
+ case LM_LONG_LONG:
+ i_num = (wide_int)
va_arg(ap, wide_int);
+ break;
+#endif
+#if SIZEOF_INTMAX_T
+ case LM_INTMAX_T:
+ i_num = (wide_int)
va_arg(ap, intmax_t);
+ break;
+#endif
+#if SIZEOF_PTRDIFF_T
+ case LM_PTRDIFF_T:
+ i_num = (wide_int)
va_arg(ap, ptrdiff_t);
+ break;
+#endif
+ }
+ }
s = ap_php_conv_10(i_num, (*fmt) == 'u',
&is_negative,
&num_buf[NUM_BUF_SIZE], &s_len);
FIX_PRECISION(adjust_precision, precision, s,
s_len);
@@ -340,12 +419,32 @@
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);
+ switch(modifier) {
+ default:
+ ui_num = (u_wide_int)
va_arg(ap, unsigned int);
+ break;
+ case LM_LONG:
+ ui_num = (u_wide_int)
va_arg(ap, unsigned long int);
+ break;
+ case LM_SIZE_T:
+ ui_num = (u_wide_int)
va_arg(ap, size_t);
+ break;
+#if SIZEOF_LONG_LONG
+ case LM_LONG_LONG:
+ ui_num = (u_wide_int)
va_arg(ap, u_wide_int);
+ break;
+#endif
+#if SIZEOF_INTMAX_T
+ case LM_INTMAX_T:
+ ui_num = (u_wide_int)
va_arg(ap, uintmax_t);
+ break;
+#endif
+#if SIZEOF_PTRDIFF_T
+ case LM_PTRDIFF_T:
+ ui_num = (u_wide_int)
va_arg(ap, ptrdiff_t);
+ break;
+#endif
+ }
s = ap_php_conv_p2(ui_num, 3, *fmt,
&num_buf[NUM_BUF_SIZE], &s_len);
FIX_PRECISION(adjust_precision, precision, s,
s_len);
@@ -358,15 +457,32 @@
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);
+ switch(modifier) {
+ default:
+ ui_num = (u_wide_int)
va_arg(ap, unsigned int);
+ break;
+ case LM_LONG:
+ ui_num = (u_wide_int)
va_arg(ap, unsigned long int);
+ break;
+ case LM_SIZE_T:
+ ui_num = (u_wide_int)
va_arg(ap, size_t);
+ break;
+#if SIZEOF_LONG_LONG
+ case LM_LONG_LONG:
+ ui_num = (u_wide_int)
va_arg(ap, u_wide_int);
+ break;
+#endif
+#if SIZEOF_INTMAX_T
+ case LM_INTMAX_T:
+ ui_num = (u_wide_int)
va_arg(ap, uintmax_t);
+ break;
+#endif
+#if SIZEOF_PTRDIFF_T
+ case LM_PTRDIFF_T:
+ ui_num = (u_wide_int)
va_arg(ap, ptrdiff_t);
+ break;
+#endif
+ }
s = ap_php_conv_p2(ui_num, 4, *fmt,
&num_buf[NUM_BUF_SIZE], &s_len);
FIX_PRECISION(adjust_precision, precision, s,
s_len);
@@ -474,7 +590,7 @@
*/
case 'p':
if (sizeof(char *) <= sizeof(u_wide_int)) {
- ui_num = (u_wide_int) va_arg(ap, char
*);
+ ui_num = (u_wide_int)((size_t)
va_arg(ap, char *));
s = ap_php_conv_p2(ui_num, 4, 'x',
&num_buf[NUM_BUF_SIZE], &s_len);
if (i_num != 0) {-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
