summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
Diffstat (limited to 'ext')
-rw-r--r--ext/ereg/ereg.c18
-rw-r--r--ext/ereg/php_ereg.h4
-rw-r--r--ext/gd/config.h.stub3
-rw-r--r--ext/gd/config.m484
-rw-r--r--ext/gd/gd.c91
-rw-r--r--ext/gd/gdcache.c6
-rw-r--r--ext/gd/gdttf.c20
-rw-r--r--ext/gd/php3_gd.h7
-rw-r--r--ext/informix/ifx.ec39
-rw-r--r--ext/standard/Makefile.am3
-rw-r--r--ext/standard/basic_functions.c440
-rw-r--r--ext/standard/basic_functions.h28
-rw-r--r--ext/standard/browscap.c2
-rw-r--r--ext/standard/crypt.c2
-rw-r--r--ext/standard/datetime.c31
-rw-r--r--ext/standard/datetime.h1
-rw-r--r--ext/standard/dir.c10
-rw-r--r--ext/standard/dl.c1
-rw-r--r--ext/standard/file.c4
-rw-r--r--ext/standard/filestat.c59
-rw-r--r--ext/standard/fsock.c6
-rw-r--r--ext/standard/head.c4
-rw-r--r--ext/standard/head.h2
-rw-r--r--ext/standard/link.c10
-rw-r--r--ext/standard/mail.c2
-rw-r--r--ext/standard/microtime.h1
-rw-r--r--ext/standard/pack.c4
-rw-r--r--ext/standard/parsedate.y919
-rw-r--r--ext/standard/php3_filestat.h15
-rw-r--r--ext/standard/php3_string.h5
-rw-r--r--ext/standard/rand.c50
-rw-r--r--ext/standard/reg.c18
-rw-r--r--ext/standard/reg.h4
-rw-r--r--ext/standard/soundex.c2
-rw-r--r--ext/standard/string.c4
-rw-r--r--ext/standard/syslog.c8
-rw-r--r--ext/wddx/wddx.c2
-rw-r--r--ext/xml/Makefile.am2
-rw-r--r--ext/xml/config.m417
39 files changed, 1523 insertions, 405 deletions
diff --git a/ext/ereg/ereg.c b/ext/ereg/ereg.c
index e0f34fd969..b07657d0c1 100644
--- a/ext/ereg/ereg.c
+++ b/ext/ereg/ereg.c
@@ -28,13 +28,13 @@
unsigned char third_argument_force_ref[] = { 3, BYREF_NONE, BYREF_NONE, BYREF_FORCE };
function_entry reg_functions[] = {
- {"ereg", php3_ereg, third_argument_force_ref },
- {"ereg_replace", php3_eregreplace, NULL },
- {"eregi", php3_eregi, third_argument_force_ref },
- {"eregi_replace", php3_eregireplace, NULL },
- {"split", php3_split, NULL},
- {"join", php3_implode, NULL},
- {"sql_regcase", php3_sql_regcase, NULL},
+ PHP_FE(ereg, third_argument_force_ref)
+ PHP_FE(ereg_replace, NULL)
+ PHP_FE(eregi, third_argument_force_ref)
+ PHP_FE(eregi_replace, NULL)
+ PHP_FE(split, NULL)
+ PHP_FALIAS(join, implode, NULL)
+ PHP_FE(sql_regcase, NULL)
{NULL, NULL, NULL}
};
@@ -491,7 +491,7 @@ static void _php3_eregreplace(INTERNAL_FUNCTION_PARAMETERS, int icase)
/* {{{ proto string ereg_replace(string pattern, string string [, array registers])
Replace regular expression */
-PHP_FUNCTION(eregreplace)
+PHP_FUNCTION(ereg_replace)
{
_php3_eregreplace(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
}
@@ -499,7 +499,7 @@ PHP_FUNCTION(eregreplace)
/* {{{ proto string eregi_replace(string pattern, string string [, array registers])
Case insensitive replace regular expression */
-PHP_FUNCTION(eregireplace)
+PHP_FUNCTION(eregi_replace)
{
_php3_eregreplace(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
}
diff --git a/ext/ereg/php_ereg.h b/ext/ereg/php_ereg.h
index 4b7f37466d..c261abf4d2 100644
--- a/ext/ereg/php_ereg.h
+++ b/ext/ereg/php_ereg.h
@@ -40,8 +40,8 @@ char *_php3_regreplace(const char *pattern, const char *replace, const char *str
PHP_FUNCTION(ereg);
PHP_FUNCTION(eregi);
-PHP_FUNCTION(eregireplace);
-PHP_FUNCTION(eregreplace);
+PHP_FUNCTION(eregi_replace);
+PHP_FUNCTION(ereg_replace);
PHP_FUNCTION(split);
PHPAPI PHP_FUNCTION(sql_regcase);
diff --git a/ext/gd/config.h.stub b/ext/gd/config.h.stub
index 4e619595f7..db06b056cd 100644
--- a/ext/gd/config.h.stub
+++ b/ext/gd/config.h.stub
@@ -4,3 +4,6 @@
/* Define if you have the gd version 1.3 library (-lgd). */
#define HAVE_LIBGD13 0
+#undef FREETYPE_4BIT_ANTIALIAS_HACK
+#undef HAVE_LIBFREETYPE
+#undef HAVE_LIBTTF
diff --git a/ext/gd/config.m4 b/ext/gd/config.m4
index 6378535f0a..b32614a59d 100644
--- a/ext/gd/config.m4
+++ b/ext/gd/config.m4
@@ -7,7 +7,7 @@ AC_ARG_WITH(gd,
no)
AC_MSG_RESULT(no) ;;
yes)
- GD_LIBS="-lgd"
+ AC_ADD_LIBRARY(gd)
AC_DEFINE(HAVE_LIBGD)
AC_MSG_RESULT(yes)
AC_CHECK_LIB(gd, gdImageString16, [ AC_DEFINE(HAVE_LIBGD13) ])
@@ -15,12 +15,19 @@ AC_ARG_WITH(gd,
;;
*)
dnl A whole whack of possible places where this might be
- test -f $withval/include/gd1.3/gd.h && GD_INCLUDE="-I$withval/include/gd1.3"
- test -f $withval/include/gd/gd.h && GD_INCLUDE="-I$withval/include/gd"
- test -f $withval/include/gd.h && GD_INCLUDE="-I$withval/include"
- test -f $withval/gd1.3/gd.h && GD_INCLUDE="-I$withval/gd1.3"
- test -f $withval/gd/gd.h && GD_INCLUDE="-I$withval/gd"
- test -f $withval/gd.h && GD_INCLUDE="-I$withval"
+ test -f $withval/include/gd1.3/gd.h && GD_INCLUDE="$withval/include/gd1.3"
+ test -f $withval/include/gd/gd.h && GD_INCLUDE="$withval/include/gd"
+ test -f $withval/include/gd.h && GD_INCLUDE="$withval/include"
+ test -f $withval/gd1.3/gd.h && GD_INCLUDE="$withval/gd1.3"
+ test -f $withval/gd/gd.h && GD_INCLUDE="$withval/gd"
+ test -f $withval/gd.h && GD_INCLUDE="$withval"
+
+ test -f $withval/lib/libgd.so && GD_LIB="$withval/lib"
+ test -f $withval/lib/gd/libgd.so && GD_LIB="$withval/lib/gd"
+ test -f $withval/lib/gd1.3/libgd.so && GD_LIB="$withval/lib/gd1.3"
+ test -f $withval/libgd.so && GD_LIB="$withval"
+ test -f $withval/gd/libgd.so && GD_LIB="$withval/gd"
+ test -f $withval/gd1.3/libgd.so && GD_LIB="$withval/gd1.3"
test -f $withval/lib/libgd.a && GD_LIB="$withval/lib"
test -f $withval/lib/gd/libgd.a && GD_LIB="$withval/lib/gd"
@@ -30,13 +37,13 @@ dnl A whole whack of possible places where this might be
test -f $withval/gd1.3/libgd.a && GD_LIB="$withval/gd1.3"
if test -n "$GD_INCLUDE" && test -n "$GD_LIB" ; then
- GD_LIBS="-L$GD_LIB -lgd"
+ AC_ADD_LIBRARY_WITH_PATH(gd, $GD_LIB)
AC_DEFINE(HAVE_LIBGD)
AC_MSG_RESULT(yes)
AC_CHECK_LIB(gd, gdImageString16, [ AC_DEFINE(HAVE_LIBGD13) ])
ac_cv_lib_gd_gdImageLine=yes
else
- AC_MSG_ERROR(Unable to find libgd.a anywhere under $withval)
+ AC_MSG_ERROR([Unable to find libgd.(a|so) anywhere under $withval])
fi ;;
esac
],[
@@ -44,11 +51,62 @@ dnl A whole whack of possible places where this might be
AC_CHECK_LIB(gd, gdImageString16, [ AC_DEFINE(HAVE_LIBGD13) ])
])
if test "$ac_cv_lib_gd_gdImageLine" = "yes"; then
+ CHECK_TTF="yes"
+ AC_ARG_WITH(ttf,
+ [ --with-ttf[=DIR] Include Freetype support],[
+ if test $withval = "no" ; then
+ CHECK_TTF=""
+ else
+ CHECK_TTF="$withval"
+ fi
+ ])
+
+ AC_MSG_CHECKING(whether to include ttf support)
+ if test -n "$CHECK_TTF" ; then
+ for i in /usr /usr/local "$CHECK_TTF" ; do
+ if test -f "$i/include/truetype.h" ; then
+ FREETYPE_DIR="$i"
+ fi
+ if test -f "$i/include/freetype.h" ; then
+ TTF_DIR="$i"
+ fi
+ done
+ if test -n "$FREETYPE_DIR" ; then
+ AC_DEFINE(HAVE_LIBFREETYPE)
+ AC_ADD_LIBRARY_WITH_PATH(freetype, $FREETYPE_DIR/lib)
+ AC_ADD_INCLUDE($FREETYPE_DIR/include)
+ AC_MSG_RESULT(yes)
+ else
+ if test -n "$TTF_DIR" ; then
+ AC_DEFINE(HAVE_LIBTTF)
+ AC_ADD_LIBRARY_WITH_PATH(ttf, $TTF_DIR/lib)
+ AC_ADD_INCLUDE($TTF_DIR/include)
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_RESULT(no)
+ fi
+ fi
+ else
+ AC_MSG_RESULT(no)
+ fi
+
if test -f /usr/pkg/include/gd/gd.h -a -z "$GD_INCLUDE" ; then
- GD_INCLUDE="-I/usr/pkg/include/gd"
+ GD_INCLUDE="/usr/pkg/include/gd"
+ fi
+
+ AC_MSG_CHECKING(whether to enable 4bit antialias hack with FreeType2)
+ AC_ARG_ENABLE(freetype-4bit-antialias-hack,
+ [ --enable-freetype-4bit-antialias-hack For the crazy with FreeType2.],[
+ if test "$enableval" = "yes" ; then
+ AC_DEFINE(FREETYPE_4BIT_ANTIALIAS_HACK, 1)
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_RESULT(no)
fi
- AC_CHECK_LIB(ttf, TT_Open_Face)
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+
PHP_EXTENSION(gd)
- EXTRA_LIBS="$EXTRA_LIBS $GD_LIBS"
- INCLUDES="$INCLUDES $GD_INCLUDE"
+ AC_ADD_INCLUDE($GD_INCLUDE)
fi
diff --git a/ext/gd/gd.c b/ext/gd/gd.c
index 511e349586..bd82f1ce70 100644
--- a/ext/gd/gd.c
+++ b/ext/gd/gd.c
@@ -49,7 +49,7 @@
#include <gdfontmb.h> /* 3 Medium bold font */
#include <gdfontl.h> /* 4 Large font */
#include <gdfontg.h> /* 5 Giant font */
-#if HAVE_LIBTTF
+#ifdef ENABLE_GD_TTF
# include "gdttf.h"
#endif
@@ -57,7 +57,7 @@
#define M_PI 3.14159265358979323846
#endif
-#if HAVE_LIBTTF
+#ifdef ENABLE_GD_TTF
static void php3_imagettftext_common(INTERNAL_FUNCTION_PARAMETERS, int);
#endif
@@ -118,7 +118,7 @@ function_entry gd_functions[] = {
{"imagesx", php3_imagesxfn, NULL},
{"imagesy", php3_imagesyfn, NULL},
{"imagedashedline", php3_imagedashedline, NULL},
-#if HAVE_LIBTTF
+#ifdef ENABLE_GD_TTF
{"imagettfbbox", php3_imagettfbbox, NULL},
{"imagettftext", php3_imagettftext, NULL},
#endif
@@ -175,7 +175,7 @@ void php3_info_gd(ZEND_MODULE_INFO_FUNC_ARGS)
#else
php3_printf("Version 1.2");
#endif
-#if HAVE_LIBTTF
+#ifdef ENABLE_GD_TTF
php3_printf(" with FreeType support");
#endif
}
@@ -340,7 +340,8 @@ PHP_FUNCTION(imageloadfont) {
/* {{{ proto int imagecreate(int x_size, int y_size)
Create a new image */
-PHP_FUNCTION(imagecreate) {
+PHP_FUNCTION(imagecreate)
+{
pval *x_size, *y_size;
int ind;
gdImagePtr im;
@@ -362,7 +363,8 @@ PHP_FUNCTION(imagecreate) {
/* {{{ proto int imagecreatefromgif(string filename)
Create a new image from file or URL */
-PHP_FUNCTION(imagecreatefromgif ) {
+PHP_FUNCTION(imagecreatefromgif )
+{
pval *file;
int ind;
gdImagePtr im;
@@ -404,7 +406,8 @@ PHP_FUNCTION(imagecreatefromgif ) {
/* {{{ proto int imagedestroy(int im)
Destroy an image */
-PHP_FUNCTION(imagedestroy) {
+PHP_FUNCTION(imagedestroy)
+{
pval *imgind;
if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &imgind) == FAILURE) {
@@ -421,7 +424,8 @@ PHP_FUNCTION(imagedestroy) {
/* {{{ proto int imagecolorallocate(int im, int red, int green, int blue)
Allocate a color for an image */
-PHP_FUNCTION(imagecolorallocate) {
+PHP_FUNCTION(imagecolorallocate)
+{
pval *imgind, *red, *green, *blue;
int ind, ind_type;
int col;
@@ -457,7 +461,8 @@ PHP_FUNCTION(imagecolorallocate) {
/* im, x, y */
/* {{{ proto int imagecolorat(int im, int x, int y)
Get the index of the color of a pixel */
-PHP_FUNCTION(imagecolorat) {
+PHP_FUNCTION(imagecolorat)
+{
pval *imgind, *x, *y;
int ind, ind_type;
gdImagePtr im;
@@ -493,7 +498,8 @@ PHP_FUNCTION(imagecolorat) {
/* {{{ proto int imagecolorclosest(int im, int red, int green, int blue)
Get the index of the closest color to the specified color */
-PHP_FUNCTION(imagecolorclosest) {
+PHP_FUNCTION(imagecolorclosest)
+{
pval *imgind, *red, *green, *blue;
int ind, ind_type;
int col;
@@ -528,7 +534,8 @@ PHP_FUNCTION(imagecolorclosest) {
/* {{{ proto int imagecolordeallocate(int im, int index)
De-allocate a color for an image */
-PHP_FUNCTION(imagecolordeallocate) {
+PHP_FUNCTION(imagecolordeallocate)
+{
pval *imgind, *index;
int ind, ind_type, col;
gdImagePtr im;
@@ -562,7 +569,8 @@ PHP_FUNCTION(imagecolordeallocate) {
/* {{{ proto int imagecolorresolve(int im, int red, int green, int blue)
Get the index of the specified color or its closest possible alternative */
-PHP_FUNCTION(imagecolorresolve) {
+PHP_FUNCTION(imagecolorresolve)
+{
pval *imgind, *red, *green, *blue;
int ind, ind_type;
int col;
@@ -597,7 +605,8 @@ PHP_FUNCTION(imagecolorresolve) {
/* {{{ proto int imagecolorexact(int im, int red, int green, int blue)
Get the index of the specified color */
-PHP_FUNCTION(imagecolorexact) {
+PHP_FUNCTION(imagecolorexact)
+{
pval *imgind, *red, *green, *blue;
int ind, ind_type;
int col;
@@ -632,7 +641,8 @@ PHP_FUNCTION(imagecolorexact) {
/* {{{ proto int imagecolorset(int im, int col, int red, int green, int blue)
Set the color for the specified palette index */
-PHP_FUNCTION(imagecolorset) {
+PHP_FUNCTION(imagecolorset)
+{
pval *imgind, *color, *red, *green, *blue;
int ind, ind_type;
int col;
@@ -674,7 +684,8 @@ PHP_FUNCTION(imagecolorset) {
/* {{{ proto array imagecolorsforindex(int im, int col)
Get the colors for an index */
-PHP_FUNCTION(imagecolorsforindex) {
+PHP_FUNCTION(imagecolorsforindex)
+{
pval *imgind, *index;
int col, ind, ind_type;
gdImagePtr im;
@@ -712,7 +723,8 @@ PHP_FUNCTION(imagecolorsforindex) {
/* {{{ proto int imagegif(int im, string filename)
Output image to browser or file */
-PHP_FUNCTION(imagegif ) {
+PHP_FUNCTION(imagegif )
+{
pval *imgind, *file;
gdImagePtr im;
char *fn=NULL;
@@ -791,7 +803,8 @@ PHP_FUNCTION(imagegif ) {
/* {{{ proto int imagesetpixel(int im, int x, int y, int col)
Set a single pixel */
-PHP_FUNCTION(imagesetpixel) {
+PHP_FUNCTION(imagesetpixel)
+{
pval *imarg, *xarg, *yarg, *colarg;
gdImagePtr im;
int col, y, x;
@@ -828,7 +841,8 @@ PHP_FUNCTION(imagesetpixel) {
/* im, x1, y1, x2, y2, col */
/* {{{ proto int imageline(int im, int x1, int y1, int x2, int y2, int col)
Draw a line */
-PHP_FUNCTION(imageline) {
+PHP_FUNCTION(imageline)
+{
pval *IM, *COL, *X1, *Y1, *X2, *Y2;
gdImagePtr im;
int col, y2, x2, y1, x1;
@@ -867,7 +881,8 @@ PHP_FUNCTION(imageline) {
/* {{{ proto int imagedashedline(int im, int x1, int y1, int x2, int y2, int col)
Draw a dashed line */
-PHP_FUNCTION(imagedashedline) {
+PHP_FUNCTION(imagedashedline)
+{
pval *IM, *COL, *X1, *Y1, *X2, *Y2;
gdImagePtr im;
int col, y2, x2, y1, x1;
@@ -906,7 +921,8 @@ PHP_FUNCTION(imagedashedline) {
/* im, x1, y1, x2, y2, col */
/* {{{ proto int imagerectangle(int im, int x1, int y1, int x2, int y2, int col)
Draw a rectangle */
-PHP_FUNCTION(imagerectangle) {
+PHP_FUNCTION(imagerectangle)
+{
pval *IM, *COL, *X1, *Y1, *X2, *Y2;
gdImagePtr im;
int col, y2, x2, y1, x1;
@@ -946,7 +962,8 @@ PHP_FUNCTION(imagerectangle) {
/* im, x1, y1, x2, y2, col */
/* {{{ proto int imagefilledrectangle(int im, int x1, int y1, int x2, int y2, int col)
Draw a filled rectangle */
-PHP_FUNCTION(imagefilledrectangle) {
+PHP_FUNCTION(imagefilledrectangle)
+{
pval *IM, *COL, *X1, *Y1, *X2, *Y2;
gdImagePtr im;
int col, y2, x2, y1, x1;
@@ -985,7 +1002,8 @@ PHP_FUNCTION(imagefilledrectangle) {
/* {{{ proto int imagearc(int im, int cx, int cy, int w, int h, int s, int e, int col)
Draw a partial ellipse */
-PHP_FUNCTION(imagearc) {
+PHP_FUNCTION(imagearc)
+{
pval *COL, *E, *ST, *H, *W, *CY, *CX, *IM;
gdImagePtr im;
int col, e, st, h, w, cy, cx;
@@ -1036,7 +1054,8 @@ PHP_FUNCTION(imagearc) {
/* im, x, y, border, col */
/* {{{ proto int imagefilltoborder(int im, int x, int y, int border, int col)
Flood fill to specific color */
-PHP_FUNCTION(imagefilltoborder) {
+PHP_FUNCTION(imagefilltoborder)
+{
pval *IM, *X, *Y, *BORDER, *COL;
gdImagePtr im;
int col, border, y, x;
@@ -1074,7 +1093,8 @@ PHP_FUNCTION(imagefilltoborder) {
/* im, x, y, col */
/* {{{ proto int imagefill(int im, int x, int y, int col)
Flood fill */
-PHP_FUNCTION(imagefill) {
+PHP_FUNCTION(imagefill)
+{
pval *IM, *X, *Y, *COL;
gdImagePtr im;
int col, y, x;
@@ -1109,7 +1129,8 @@ PHP_FUNCTION(imagefill) {
/* {{{ proto int imagecolorstotal(int im)
Find out the number of colors in an image's palette */
-PHP_FUNCTION(imagecolorstotal) {
+PHP_FUNCTION(imagecolorstotal)
+{
pval *IM;
gdImagePtr im;
int ind_type;
@@ -1133,7 +1154,8 @@ PHP_FUNCTION(imagecolorstotal) {
/* im, col */
/* {{{ proto int imagecolortransparent(int im [, int col])
Define a color as transparent */
-PHP_FUNCTION(imagecolortransparent) {
+PHP_FUNCTION(imagecolortransparent)
+{
pval *IM, *COL = NULL;
gdImagePtr im;
int col;
@@ -1175,7 +1197,8 @@ PHP_FUNCTION(imagecolortransparent) {
/* im, interlace */
/* {{{ proto int imageinterlace(int im [, int interlace])
Enable or disable interlace */
-PHP_FUNCTION(imageinterlace) {
+PHP_FUNCTION(imageinterlace)
+{
pval *IM, *INT = NULL;
gdImagePtr im;
int interlace;
@@ -1218,7 +1241,7 @@ PHP_FUNCTION(imageinterlace) {
arg = 1 filled polygon */
/* im, points, num_points, col */
static void _php3_imagepolygon(INTERNAL_FUNCTION_PARAMETERS, int filled) {
- pval *IM, *POINTS, *NPOINTS, *COL, *var;
+ pval *IM, *POINTS, *NPOINTS, *COL, **var;
gdImagePtr im;
gdPoint points[PolyMaxPoints];
int npoints, col, nelem, i;
@@ -1279,12 +1302,14 @@ static void _php3_imagepolygon(INTERNAL_FUNCTION_PARAMETERS, int filled) {
for (i = 0; i < npoints; i++) {
if (_php3_hash_index_find(POINTS->value.ht, (i * 2), (void **)&var) == SUCCESS) {
- convert_to_long(var);
- points[i].x = var->value.lval;
+ SEPARATE_ZVAL(var);
+ convert_to_long(*var);
+ points[i].x = (*var)->value.lval;
}
if (_php3_hash_index_find(POINTS->value.ht, (i * 2) + 1, (void **)&var) == SUCCESS) {
- convert_to_long(var);
- points[i].y = var->value.lval;
+ SEPARATE_ZVAL(var);
+ convert_to_long(*var);
+ points[i].y = (*var)->value.lval;
}
}
@@ -1671,7 +1696,7 @@ PHP_FUNCTION(imagesyfn)
}
/* }}} */
-#if HAVE_LIBTTF
+#ifdef ENABLE_GD_TTF
#define TTFTEXT_DRAW 0
#define TTFTEXT_BBOX 1
diff --git a/ext/gd/gdcache.c b/ext/gd/gdcache.c
index 1662ebb184..e9c628607b 100644
--- a/ext/gd/gdcache.c
+++ b/ext/gd/gdcache.c
@@ -38,11 +38,11 @@
/* This just seems unessacary */
#if (WIN32|WINNT)
-#define HAVE_LIBTTF 1
+#define ENABLE_GD_TTF
#else
#include "php_config.h"
#endif
-#if HAVE_LIBTTF
+#ifdef ENABLE_GD_TTF
#include "gdcache.h"
@@ -198,4 +198,4 @@ main(char *argv[], int argc)
#endif
-#endif /* HAVE_LIBTTF */
+#endif /* ENABLE_GD_TTF */
diff --git a/ext/gd/gdttf.c b/ext/gd/gdttf.c
index 93bb3528d1..f2c1a03a9a 100644
--- a/ext/gd/gdttf.c
+++ b/ext/gd/gdttf.c
@@ -9,7 +9,7 @@
#else
#include "php_config.h"
#endif
-#if HAVE_LIBTTF
+#if HAVE_LIBTTF|HAVE_LIBFREETYPE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -17,7 +17,11 @@
#include <gd.h>
#include "gdttf.h"
#include "gdcache.h"
+#if HAVE_LIBFREETYPE
+#include <truetype.h>
+#else
#include <freetype.h>
+#endif
/* number of fonts cached before least recently used is replaced */
#define FONTCACHESIZE 6
@@ -31,7 +35,11 @@
#define BITMAPCACHESIZE 8
/* number of antialias color lookups cached */
+#if FREETYPE_4BIT_ANTIALIAS_HACK
+#define TWEENCOLORCACHESIZE 128
+#else
#define TWEENCOLORCACHESIZE 32
+#endif
/* ptsize below which anti-aliasing is ineffective */
#define MINANTIALIASPTSIZE 0
@@ -40,7 +48,11 @@
#define RESOLUTION 72
/* Number of colors used for anti-aliasing */
+#if FREETYPE_4BIT_ANTIALIAS_HACK
+#define NUMCOLORS 16
+#else
#define NUMCOLORS 4
+#endif
/* Line separation as a factor of font height.
No space between if LINESPACE = 1.00
@@ -379,7 +391,11 @@ fontFetch ( char **error, void *key )
a->cos_a = cos(a->angle);
a->engine = b->engine;
if ((err = TT_Open_Face(*b->engine, a->fontname, &a->face))) {
+#if HAVE_LIBFREETYPE
+ if (err == 0x008) { /* The FT2 oldapi is missing this code */
+#else
if (err == TT_Err_Could_Not_Open_File) {
+#endif
*error = "Could not find/open font";
}
else {
@@ -852,7 +868,7 @@ gdttf(gdImage *im, int *brect, int fg, char *fontname,
return (char *)NULL;
}
-#endif /* HAVE_LIBTTF */
+#endif /* HAVE_LIBTTF|HAVE_LIBFREETYPE */
/*
* Local variables:
diff --git a/ext/gd/php3_gd.h b/ext/gd/php3_gd.h
index d3f4dfced3..d6ef1d53b1 100644
--- a/ext/gd/php3_gd.h
+++ b/ext/gd/php3_gd.h
@@ -34,6 +34,11 @@
#ifndef _PHP3_GD_H
#define _PHP3_GD_H
+
+#if defined(HAVE_LIBTTF) && defined(HAVE_FREETYPE_H)
+#define ENABLE_GD_TTF
+#endif
+
#if COMPILE_DL
#undef HAVE_LIBGD
#define HAVE_LIBGD 1
@@ -89,7 +94,7 @@ PHP_FUNCTION(imagesyfn);
void php3_free_gd_font(gdFontPtr);
void _php3_gdimagecharup(gdImagePtr, gdFontPtr, int, int, int, int);
PHP_FUNCTION(imagedashedline);
-#ifdef HAVE_LIBTTF
+#ifdef ENABLE_GD_TTF
PHP_FUNCTION(imagettfbbox);
PHP_FUNCTION(imagettftext);
#endif
diff --git a/ext/informix/ifx.ec b/ext/informix/ifx.ec
index df60a38921..f97c4d4a28 100644
--- a/ext/informix/ifx.ec
+++ b/ext/informix/ifx.ec
@@ -1159,7 +1159,7 @@ $ifdef HAVE_IFX_IUS;
$endif;
) {
- int bid;
+ int bid = 0;
if(fieldtype==SQLTEXT) {
bid=php3_intifx_create_blob(TYPE_BLTEXT,BLMODE_INMEM,"",-1,list);
locator=php3_intifx_get_blobloc(bid,list);
@@ -1243,9 +1243,6 @@ EXEC SQL BEGIN DECLARE SECTION;
long sqlerrd[6];
int e;
-$ifdef HAVE_IFX_IUS;
- fixed binary 'blob' ifx_lo_t *slocator;
-$endif;
EXEC SQL END DECLARE SECTION;
@@ -1643,7 +1640,7 @@ $ifdef HAVE_IFX_IUS;
$endif;
) {
- int bid;
+ int bid = 0;
if(fieldtype==SQLTEXT) {
bid=php3_intifx_create_blob(TYPE_BLTEXT,BLMODE_INMEM,"",-1,list);
locator=php3_intifx_get_blobloc(bid,list);
@@ -3143,7 +3140,7 @@ EXEC SQL END DECLARE SECTION;
int type;
- int i, locind;
+ int i;
IFXLS_FETCH();
@@ -3777,7 +3774,7 @@ static char* php3_intifx_create_tmpfile(long bid) {
if ((blobdir = getenv("php3_blobdir")) == NULL)
blobdir=".";
- sprintf(filename,"blb%d",bid);
+ sprintf(filename,"blb%d",(int)bid);
blobfile=tempnam(blobdir,filename);
free(blobdir);
retval=emalloc(strlen(blobfile)+1);
@@ -4257,17 +4254,17 @@ PHP_FUNCTION(ifxus_create_slob) {
mode=pmode->value.lval;
create_mode=0;
- if(mode&1!=0)
+ if((mode&1) !=0)
create_mode|=LO_RDONLY;
- if(mode&2!=0)
+ if((mode&2) !=0)
create_mode|=LO_WRONLY;
- if(mode&4!=0)
+ if((mode&4) !=0)
create_mode|=LO_APPEND;
- if(mode&8!=0)
+ if((mode&8) !=0)
create_mode|=LO_RDWR;
- if(mode&16!=0)
+ if((mode&16) !=0)
create_mode|=LO_BUFFER;
- if(mode&32!=0)
+ if((mode&32) !=0)
create_mode|=LO_NOBUFFER;
@@ -4467,7 +4464,6 @@ static long php3_intifxus_close_slob(long bid, HashTable *list) {
opens an slob-object */
PHP_FUNCTION(ifxus_open_slob) {
pval *pbid,*pmode;
- long id;
long mode,create_mode;
if (ARG_COUNT(ht)!=2 || getParameters(ht, 1, &pbid,&pmode)==FAILURE) {
@@ -4478,17 +4474,17 @@ PHP_FUNCTION(ifxus_open_slob) {
mode=pmode->value.lval;
create_mode=0;
- if(mode&1!=0)
+ if((mode&1) !=0)
create_mode|=LO_RDONLY;
- if(mode&2!=0)
+ if((mode&2) !=0)
create_mode|=LO_WRONLY;
- if(mode&4!=0)
+ if((mode&4) !=0)
create_mode|=LO_APPEND;
- if(mode&8!=0)
+ if((mode&8) !=0)
create_mode|=LO_RDWR;
- if(mode&16!=0)
+ if((mode&16) !=0)
create_mode|=LO_BUFFER;
- if(mode&32!=0)
+ if((mode&32) !=0)
create_mode|=LO_NOBUFFER;
RETURN_LONG(php3_intifxus_open_slob(pbid->value.lval,create_mode,list));
@@ -4550,7 +4546,6 @@ static long php3_intifxus_open_slob(long bid, long create_mode, HashTable *list)
*/
static long php3_intifxus_new_slob(HashTable *list) {
IFX_IDRES *Ifx_slob;
- int errcode;
Ifx_slob=emalloc(sizeof(IFX_IDRES));
@@ -4578,7 +4573,7 @@ static long php3_intifxus_new_slob(HashTable *list) {
*/
static ifx_lo_t *php3_intifxus_get_slobloc(long bid, HashTable *list) {
IFX_IDRES *Ifx_slob;
- int errcode, type;
+ int type;
Ifx_slob = (IFX_IDRES *) php3_list_find(bid,&type);
if (type!=IFXG(le_idresult) || Ifx_slob->type!=TYPE_SLOB) {
diff --git a/ext/standard/Makefile.am b/ext/standard/Makefile.am
index ae0d698617..0f4f063c8a 100644
--- a/ext/standard/Makefile.am
+++ b/ext/standard/Makefile.am
@@ -7,7 +7,8 @@ libphpext_standard_a_SOURCES=\
html.c image.c info.c link.c mail.c math.c md5.c microtime.c \
pack.c pageinfo.c rand.c reg.c soundex.c string.c \
syslog.c type.c uniqid.c url.c iptc.c var.c quot_print.c \
- cyr_convert.c flock_compat.c crypt.c dl.c head.c post.c
+ cyr_convert.c flock_compat.c crypt.c dl.c head.c post.c \
+ parsedate.y
#number.o: number.c
# $(CC) $(CFLAGS) -w@WARNING_LEVEL@ -c $< -o $@
diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c
index 3f445804a0..372112e6b9 100644
--- a/ext/standard/basic_functions.c
+++ b/ext/standard/basic_functions.c
@@ -58,213 +58,223 @@ int user_shutdown_function_executor(pval *user_shutdown_function_name);
void php3_call_shutdown_functions(void);
function_entry basic_functions[] = {
- {"intval", int_value, NULL},
- {"doubleval", double_value, NULL},
- {"strval", string_value, NULL},
- PHP_FE(define, NULL)
- PHP_FE(defined, NULL)
- PHP_FE(bin2hex, NULL)
- {"short_tags", php3_toggle_short_open_tag, NULL},
- {"sleep", php3_sleep, NULL},
- {"usleep", php3_usleep, NULL},
- {"ksort", php3_key_sort, first_arg_force_ref},
- {"asort", php3_asort, first_arg_force_ref},
- {"arsort", php3_arsort, first_arg_force_ref},
- {"sort", php3_sort, first_arg_force_ref},
- {"rsort", php3_rsort, first_arg_force_ref},
- {"usort", php3_user_sort, first_arg_force_ref},
- {"uasort", php3_auser_sort, first_arg_force_ref},
- {"uksort", php3_user_key_sort, first_arg_force_ref},
- {"array_walk", php3_array_walk, first_arg_force_ref},
- {"sizeof", php3_count, first_arg_allow_ref},
- {"count", php3_count, first_arg_allow_ref},
- {"time", php3_time, NULL},
- {"mktime", php3_mktime, NULL},
- {"gmmktime", php3_gmmktime, NULL},
+ PHP_FE(intval, NULL)
+ PHP_FE(doubleval, NULL)
+ PHP_FE(strval, NULL)
+ PHP_FE(define, NULL)
+ PHP_FE(defined, NULL)
+ PHP_FE(bin2hex, NULL)
+ PHP_FE(toggle_short_open_tag, NULL)
+ PHP_FE(sleep, NULL)
+ PHP_FE(usleep, NULL)
+
+ PHP_FE(ksort, first_arg_force_ref)
+ PHP_FE(asort, first_arg_force_ref)
+ PHP_FE(arsort, first_arg_force_ref)
+ PHP_FE(sort, first_arg_force_ref)
+ PHP_FE(rsort, first_arg_force_ref)
+ PHP_FE(usort, first_arg_force_ref)
+ PHP_FE(uasort, first_arg_force_ref)
+ PHP_FE(uksort, first_arg_force_ref)
+ PHP_FE(array_walk, first_arg_force_ref)
+ PHP_FALIAS(sizeof, count, first_arg_force_ref)
+ PHP_FE(count, first_arg_force_ref)
+ PHP_FE(end, first_arg_force_ref)
+ PHP_FE(prev, first_arg_force_ref)
+ PHP_FE(next, first_arg_force_ref)
+ PHP_FE(reset, first_arg_force_ref)
+ PHP_FE(current, first_arg_force_ref)
+ PHP_FE(key, first_arg_force_ref)
+ PHP_FE(each, first_arg_force_ref)
+ PHP_FALIAS(pos, current, first_arg_force_ref)
+
+ PHP_FE(time, NULL)
+ PHP_FE(mktime, NULL)
+ PHP_FE(gmmktime, NULL)
#if HAVE_STRFTIME
- {"strftime", php3_strftime, NULL},
+ PHP_FE(strftime, NULL)
#endif
- {"date", php3_date, NULL},
- {"gmdate", php3_gmdate, NULL},
- {"getdate", php3_getdate, NULL},
- {"checkdate", php3_checkdate, NULL},
- {"chr", php3_chr, NULL},
- {"ord", php3_ord, NULL},
- {"flush", php3_flush, NULL},
- {"end", array_end, first_arg_force_ref},
- {"prev", array_prev, first_arg_force_ref},
- {"next", array_next, first_arg_force_ref},
- {"reset", array_reset, first_arg_force_ref},
- {"current", array_current, first_arg_force_ref},
- {"key", array_current_key, first_arg_force_ref},
- {"each", array_each, first_arg_force_ref},
- {"gettype", php3_gettype, NULL},
- {"settype", php3_settype, first_arg_force_ref},
- {"min", php3_min, NULL},
- {"max", php3_max, NULL},
-
- {"addslashes", php3_addslashes, NULL},
- {"chop", php3_chop, NULL},
- {"str_replace", php3_str_replace, NULL},
- {"chunk_split", php3_chunk_split, NULL},
- {"trim", php3_trim, NULL},
- {"ltrim", php3_ltrim, NULL},
- {"rtrim", php3_chop, NULL},
- {"pos", array_current, first_arg_force_ref},
-
- {"getimagesize", php3_getimagesize, NULL},
- {"htmlspecialchars", php3_htmlspecialchars, NULL},
- {"htmlentities", php3_htmlentities, NULL},
- {"md5", php3_md5, NULL},
-
- {"iptcparse", php3_iptcparse, NULL},
- {"iptcembed", php3_iptcembed, NULL},
- {"parse_url", php3_parse_url, NULL},
-
- {"parse_str", php3_parsestr, NULL},
- PHP_FE(phpinfo, NULL)
- PHP_FE(phpversion, NULL)
- PHP_FE(phpcredits, NULL)
- {"strlen", php3_strlen, NULL},
- {"strcmp", php3_strcmp, NULL},
- {"strspn", php3_strspn, NULL},
- {"strcspn", php3_strcspn, NULL},
- {"strcasecmp", php3_strcasecmp, NULL},
- {"strtok", php3_strtok, NULL},
- {"strtoupper", php3_strtoupper, NULL},
- {"strtolower", php3_strtolower, NULL},
- {"strchr", php3_strstr, NULL},
- {"strpos", php3_strpos, NULL},
- {"strrpos", php3_strrpos, NULL},
- {"strrev", php3_strrev, NULL},
- {"hebrev", php3_hebrev, NULL},
- PHP_FE(hebrevc, NULL)
- PHP_FE(nl2br, NULL)
- {"basename", php3_basename, NULL},
- {"dirname", php3_dirname, NULL},
- {"stripslashes", php3_stripslashes, NULL},
- {"strstr", php3_strstr, NULL},
- {"stristr", php3_stristr, NULL},
- {"strrchr", php3_strrchr, NULL},
- {"substr", php3_substr, NULL},
- {"quotemeta", php3_quotemeta, NULL},
- {"urlencode", php3_urlencode, NULL},
- {"urldecode", php3_urldecode, NULL},
- {"rawurlencode", php3_rawurlencode, NULL},
- {"rawurldecode", php3_rawurldecode, NULL},
- {"ucfirst", php3_ucfirst, NULL},
- {"ucwords", php3_ucwords, NULL},
- {"strtr", php3_strtr, NULL},
- {"sprintf", php3_user_sprintf, NULL},
- {"printf", php3_user_printf, NULL},
- {"setlocale", php3_setlocale, NULL},
-
- {"exec", php3_exec, second_and_third_args_force_ref},
- {"system", php3_system, second_arg_force_ref},
- {"escapeshellcmd", php3_escapeshellcmd, NULL},
- {"passthru", php3_passthru, second_arg_force_ref},
- PHP_FE(shell_exec, NULL)
-
- {"soundex", soundex, NULL},
-
- {"rand", php3_rand, NULL},
- {"srand", php3_srand, NULL},
- {"getrandmax", php3_getrandmax, NULL},
- {"mt_rand", php3_mt_rand, NULL},
- {"mt_srand", php3_mt_srand, NULL},
- {"mt_getrandmax", php3_mt_getrandmax, NULL},
- {"gethostbyaddr", php3_gethostbyaddr, NULL},
- {"gethostbyname", php3_gethostbyname, NULL},
- {"gethostbynamel", php3_gethostbynamel, NULL},
+ PHP_FE(strtotime, NULL)
+ PHP_FE(date, NULL)
+ PHP_FE(gmdate, NULL)
+ PHP_FE(getdate, NULL)
+ PHP_FE(checkdate, NULL)
+
+ PHP_FE(flush, NULL)
+
+ PHP_FE(gettype, NULL)
+ PHP_FE(settype, first_arg_force_ref)
+
+ PHP_FE(min, NULL)
+ PHP_FE(max, NULL)
+
+ PHP_FE(getimagesize, NULL)
+
+ PHP_FE(htmlspecialchars, NULL)
+ PHP_FE(htmlentities, NULL)
+
+ PHP_FE(md5, NULL)
+
+ PHP_FE(iptcparse, NULL)
+ PHP_FE(iptcembed, NULL)
+
+ PHP_FE(phpinfo, NULL)
+ PHP_FE(phpversion, NULL)
+ PHP_FE(phpcredits, NULL)
+
+ PHP_FE(strlen, NULL)
+ PHP_FE(strcmp, NULL)
+ PHP_FE(strspn, NULL)
+ PHP_FE(strcspn, NULL)
+ PHP_FE(strcasecmp, NULL)
+ PHP_FE(strtok, NULL)
+ PHP_FE(strtoupper, NULL)
+ PHP_FE(strtolower, NULL)
+ PHP_FE(strpos, NULL)
+ PHP_FE(strrpos, NULL)
+ PHP_FE(strrev, NULL)
+ PHP_FE(hebrev, NULL)
+ PHP_FE(hebrevc, NULL)
+ PHP_FE(nl2br, NULL)
+ PHP_FE(basename, NULL)
+ PHP_FE(dirname, NULL)
+ PHP_FE(stripslashes, NULL)
+ PHP_FE(strstr, NULL)
+ PHP_FE(stristr, NULL)
+ PHP_FE(strrchr, NULL)
+ PHP_FE(substr, NULL)
+ PHP_FE(quotemeta, NULL)
+ PHP_FE(ucfirst, NULL)
+ PHP_FE(ucwords, NULL)
+ PHP_FE(strtr, NULL)
+ PHP_FE(addslashes, NULL)
+ PHP_FE(chop, NULL)
+ PHP_FE(str_replace, NULL)
+ PHP_FE(chunk_split, NULL)
+ PHP_FE(trim, NULL)
+ PHP_FE(ltrim, NULL)
+ PHP_FE(strip_tags, NULL)
+ PHP_FE(similar_text, NULL)
+ PHP_FE(explode, NULL)
+ PHP_FE(implode, NULL)
+ PHP_FE(setlocale, NULL)
+ PHP_FE(soundex, NULL)
+ PHP_FE(chr, NULL)
+ PHP_FE(ord, NULL)
+ PHP_FE(parse_str, NULL)
+ PHP_FALIAS(rtrim, chop, NULL)
+ PHP_FALIAS(strchr, strstr, NULL)
+ PHP_NAMED_FE(sprintf, php3_user_sprintf, NULL)
+ PHP_NAMED_FE(printf, php3_user_printf, NULL)
+
+ PHP_FE(parse_url, NULL)
+ PHP_FE(urlencode, NULL)
+ PHP_FE(urldecode, NULL)
+ PHP_FE(rawurlencode, NULL)
+ PHP_FE(rawurldecode, NULL)
+
+ PHP_FE(exec, second_and_third_args_force_ref)
+ PHP_FE(system, second_arg_force_ref)
+ PHP_FE(escapeshellcmd, NULL)
+ PHP_FE(passthru, second_arg_force_ref)
+ PHP_FE(shell_exec, NULL)
+
+ PHP_FE(rand, NULL)
+ PHP_FE(srand, NULL)
+ PHP_FE(getrandmax, NULL)
+ PHP_FE(mt_rand, NULL)
+ PHP_FE(mt_srand, NULL)
+ PHP_FE(mt_getrandmax, NULL)
+
+ PHP_FE(gethostbyaddr, NULL)
+ PHP_FE(gethostbyname, NULL)
+ PHP_FE(gethostbynamel, NULL)
#if !(WIN32|WINNT)||HAVE_BINDLIB
- {"checkdnsrr", php3_checkdnsrr, NULL},
- {"getmxrr", php3_getmxrr, second_and_third_args_force_ref},
+ PHP_FE(checkdnsrr, NULL)
+ PHP_FE(getmxrr, second_and_third_args_force_ref)
#endif
- {"explode", php3_explode, NULL},
- {"implode", php3_implode, NULL},
- {"getenv", php3_getenv, NULL},
- {"error_reporting", php3_error_reporting, NULL},
- {"clearstatcache", php3_clearstatcache, NULL},
- {"unlink", php3_unlink, NULL},
+ PHP_FE(error_reporting, NULL)
- {"getmyuid", php3_getmyuid, NULL},
- {"getmypid", php3_getmypid, NULL},
+ PHP_FE(getmyuid, NULL)
+ PHP_FE(getmypid, NULL)
+ PHP_FE(getmyinode, NULL)
+ PHP_FE(getlastmod, NULL)
/*getmyiid is here for forward compatibility with 3.1
See pageinfo.c in 3.1 for more information*/
- {"getmyiid", php3_getmypid, NULL},
- {"getmyinode", php3_getmyinode, NULL},
- {"getlastmod", php3_getlastmod, NULL},
-
- {"base64_decode", php3_base64_decode, NULL},
- {"base64_encode", php3_base64_encode, NULL},
-
- {"abs", php3_abs, NULL},
- {"ceil", php3_ceil, NULL},
- {"floor", php3_floor, NULL},
- {"round", php3_round, NULL},
- {"sin", php3_sin, NULL},
- {"cos", php3_cos, NULL},
- {"tan", php3_tan, NULL},
- {"asin", php3_asin, NULL},
- {"acos", php3_acos, NULL},
- {"atan", php3_atan, NULL},
- {"atan2", php3_atan2, NULL},
- {"pi", php3_pi, NULL},
- {"pow", php3_pow, NULL},
- {"exp", php3_exp, NULL},
- {"log", php3_log, NULL},
- {"log10", php3_log10, NULL},
- {"sqrt", php3_sqrt, NULL},
- {"deg2rad", php3_deg2rad, NULL},
- {"rad2deg", php3_rad2deg, NULL},
- {"bindec", php3_bindec, NULL},
- {"hexdec", php3_hexdec, NULL},
- {"octdec", php3_octdec, NULL},
- {"decbin", php3_decbin, NULL},
- {"decoct", php3_decoct, NULL},
- {"dechex", php3_dechex, NULL},
- {"base_convert",php3_base_convert, NULL},
- {"number_format", php3_number_format, NULL},
-
+ /* {"getmyiid", php3_getmypid, NULL}, */
+
+ PHP_FE(base64_decode, NULL)
+ PHP_FE(base64_encode, NULL)
+
+ PHP_FE(abs, NULL)
+ PHP_FE(ceil, NULL)
+ PHP_FE(floor, NULL)
+ PHP_FE(round, NULL)
+ PHP_FE(sin, NULL)
+ PHP_FE(cos, NULL)
+ PHP_FE(tan, NULL)
+ PHP_FE(asin, NULL)
+ PHP_FE(acos, NULL)
+ PHP_FE(atan, NULL)
+ PHP_FE(atan2, NULL)
+ PHP_FE(pi, NULL)
+ PHP_FE(pow, NULL)
+ PHP_FE(exp, NULL)
+ PHP_FE(log, NULL)
+ PHP_FE(log10, NULL)
+ PHP_FE(sqrt, NULL)
+ PHP_FE(deg2rad, NULL)
+ PHP_FE(rad2deg, NULL)
+ PHP_FE(bindec, NULL)
+ PHP_FE(hexdec, NULL)
+ PHP_FE(octdec, NULL)
+ PHP_FE(decbin, NULL)
+ PHP_FE(decoct, NULL)
+ PHP_FE(dechex, NULL)
+ PHP_FE(base_convert, NULL)
+ PHP_FE(number_format, NULL)
+
+ PHP_FE(getenv, NULL)
#ifdef HAVE_PUTENV
- {"putenv", php3_putenv, NULL},
+ PHP_FE(putenv, NULL)
#endif
- {"microtime", php3_microtime, NULL},
- {"uniqid", php3_uniqid, NULL},
- {"linkinfo", php3_linkinfo, NULL},
- {"readlink", php3_readlink, NULL},
- {"symlink", php3_symlink, NULL},
- {"link", php3_link, NULL},
- {"quoted_printable_decode", php3_quoted_printable_decode, NULL},
- {"convert_cyr_string", php3_convert_cyr_string, NULL},
- {"get_current_user", php3_get_current_user, NULL},
- {"set_time_limit", php3_set_time_limit, NULL},
-
- {"get_cfg_var", php3_get_cfg_var, NULL},
- {"magic_quotes_runtime", php3_set_magic_quotes_runtime, NULL},
- {"set_magic_quotes_runtime", php3_set_magic_quotes_runtime, NULL},
- {"get_magic_quotes_gpc", php3_get_magic_quotes_gpc, NULL},
- {"get_magic_quotes_runtime", php3_get_magic_quotes_runtime, NULL},
-
- {"is_long", php3_is_long, first_arg_allow_ref},
- {"is_int", php3_is_long, first_arg_allow_ref},
- {"is_integer", php3_is_long, first_arg_allow_ref},
- {"is_float", php3_is_double, first_arg_allow_ref},
- {"is_double", php3_is_double, first_arg_allow_ref},
- {"is_real", php3_is_double, first_arg_allow_ref},
- {"is_string", php3_is_string, first_arg_allow_ref},
- {"is_array", php3_is_array, first_arg_allow_ref},
- {"is_object", php3_is_object, first_arg_allow_ref},
-
- {"leak", php3_leak, NULL},
- {"error_log", php3_error_log, NULL},
- {"call_user_func", php3_call_user_func, NULL},
- {"call_user_method", php3_call_user_method, NULL},
-
- PHP_FE(var_dump, NULL)
- PHP_FE(serialize, first_arg_allow_ref)
- PHP_FE(unserialize, first_arg_allow_ref)
+
+ PHP_FE(microtime, NULL)
+ PHP_FE(getrusage, NULL)
+
+ PHP_FE(uniqid, NULL)
+
+ PHP_FE(quoted_printable_decode, NULL)
+
+ PHP_FE(convert_cyr_string, NULL)
+ PHP_FE(get_current_user, NULL)
+ PHP_FE(set_time_limit, NULL)
+
+ PHP_FE(get_cfg_var, NULL)
+ PHP_FALIAS(magic_quotes_runtime, set_magic_quotes_runtime, NULL)
+ PHP_FE(set_magic_quotes_runtime, NULL)
+ PHP_FE(get_magic_quotes_gpc, NULL)
+ PHP_FE(get_magic_quotes_runtime, NULL)
+
+ PHP_FE(is_long, first_arg_allow_ref)
+ PHP_FALIAS(is_int, is_long, first_arg_allow_ref)
+ PHP_FALIAS(is_integer, is_long, first_arg_allow_ref)
+ PHP_FALIAS(is_float, is_double, first_arg_allow_ref)
+ PHP_FE(is_double, first_arg_allow_ref)
+ PHP_FALIAS(is_real, is_double, first_arg_allow_ref)
+ PHP_FE(is_string, first_arg_allow_ref)
+ PHP_FE(is_array, first_arg_allow_ref)
+ PHP_FE(is_object, first_arg_allow_ref)
+
+ PHP_FE(leak, NULL)
+ PHP_FE(error_log, NULL)
+ PHP_FE(call_user_func, NULL)
+ PHP_FE(call_user_method, NULL)
+
+ PHP_FE(var_dump, NULL)
+ PHP_FE(serialize, first_arg_allow_ref)
+ PHP_FE(unserialize, first_arg_allow_ref)
PHP_FE(register_shutdown_function, NULL)
@@ -282,9 +292,11 @@ function_entry basic_functions[] = {
PHP_FE(ini_restore, NULL)
PHP_FE(print_r, NULL)
- {"setcookie", php3_SetCookie, NULL},
- {"header", php3_Header, NULL},
- PHP_FE(headers_sent, NULL)
+
+ PHP_FE(setcookie, NULL)
+ PHP_FE(Header, NULL)
+ PHP_FE(headers_sent, NULL)
+
PHP_FE(function_exists, NULL)
PHP_FE(in_array, NULL)
PHP_FE(extract, NULL)
@@ -559,7 +571,7 @@ PHP_FUNCTION(toggle_short_open_tag)
* Basic Functions *
*******************/
-void int_value(INTERNAL_FUNCTION_PARAMETERS)
+PHP_FUNCTION(intval)
{
pval *num, *arg_base;
int base;
@@ -587,7 +599,7 @@ void int_value(INTERNAL_FUNCTION_PARAMETERS)
}
-void double_value(INTERNAL_FUNCTION_PARAMETERS)
+PHP_FUNCTION(doubleval)
{
pval *num;
@@ -599,7 +611,7 @@ void double_value(INTERNAL_FUNCTION_PARAMETERS)
}
-void string_value(INTERNAL_FUNCTION_PARAMETERS)
+PHP_FUNCTION(strval)
{
pval *num;
@@ -636,7 +648,7 @@ static int array_key_compare(const void *a, const void *b)
}
-PHP_FUNCTION(key_sort)
+PHP_FUNCTION(ksort)
{
pval *array;
HashTable *target_hash;
@@ -853,7 +865,7 @@ static int array_user_compare(const void *a, const void *b)
}
-PHP_FUNCTION(user_sort)
+PHP_FUNCTION(usort)
{
pval *array;
pval *old_compare_func;
@@ -879,7 +891,7 @@ PHP_FUNCTION(user_sort)
RETURN_TRUE;
}
-PHP_FUNCTION(auser_sort)
+PHP_FUNCTION(uasort)
{
pval *array;
pval *old_compare_func;
@@ -953,7 +965,7 @@ static int array_user_key_compare(const void *a, const void *b)
}
-PHP_FUNCTION(user_key_sort)
+PHP_FUNCTION(uksort)
{
pval *array;
pval *old_compare_func;
@@ -980,7 +992,7 @@ PHP_FUNCTION(user_key_sort)
}
-void array_end(INTERNAL_FUNCTION_PARAMETERS)
+PHP_FUNCTION(end)
{
pval *array, **entry;
HashTable *target_hash;
@@ -1005,7 +1017,7 @@ void array_end(INTERNAL_FUNCTION_PARAMETERS)
}
-void array_prev(INTERNAL_FUNCTION_PARAMETERS)
+PHP_FUNCTION(prev)
{
pval *array, **entry;
HashTable *target_hash;
@@ -1028,7 +1040,7 @@ void array_prev(INTERNAL_FUNCTION_PARAMETERS)
}
-void array_next(INTERNAL_FUNCTION_PARAMETERS)
+PHP_FUNCTION(next)
{
pval *array, **entry;
HashTable *target_hash;
@@ -1051,7 +1063,7 @@ void array_next(INTERNAL_FUNCTION_PARAMETERS)
}
-void array_each(INTERNAL_FUNCTION_PARAMETERS)
+PHP_FUNCTION(each)
{
pval *array,*entry,**entry_ptr, *tmp;
char *string_key;
@@ -1103,7 +1115,7 @@ void array_each(INTERNAL_FUNCTION_PARAMETERS)
}
-void array_reset(INTERNAL_FUNCTION_PARAMETERS)
+PHP_FUNCTION(reset)
{
pval *array, **entry;
HashTable *target_hash;
@@ -1126,7 +1138,7 @@ void array_reset(INTERNAL_FUNCTION_PARAMETERS)
INIT_PZVAL(return_value);
}
-void array_current(INTERNAL_FUNCTION_PARAMETERS)
+PHP_FUNCTION(current)
{
pval *array, **entry;
HashTable *target_hash;
@@ -1147,7 +1159,7 @@ void array_current(INTERNAL_FUNCTION_PARAMETERS)
}
-void array_current_key(INTERNAL_FUNCTION_PARAMETERS)
+PHP_FUNCTION(key)
{
pval *array;
char *string_key;
diff --git a/ext/standard/basic_functions.h b/ext/standard/basic_functions.h
index ab1fe02203..086a049e6e 100644
--- a/ext/standard/basic_functions.h
+++ b/ext/standard/basic_functions.h
@@ -43,30 +43,30 @@ extern int php3_minit_basic(INIT_FUNC_ARGS);
extern int php3_mshutdown_basic(SHUTDOWN_FUNC_ARGS);
extern int php3_rinit_basic(INIT_FUNC_ARGS);
extern int php3_rshutdown_basic(SHUTDOWN_FUNC_ARGS);
-void int_value(INTERNAL_FUNCTION_PARAMETERS);
-void double_value(INTERNAL_FUNCTION_PARAMETERS);
-void string_value(INTERNAL_FUNCTION_PARAMETERS);
+PHP_FUNCTION(intval);
+PHP_FUNCTION(doubleval);
+PHP_FUNCTION(strval);
PHP_FUNCTION(toggle_short_open_tag);
PHP_FUNCTION(sleep);
PHP_FUNCTION(usleep);
-PHP_FUNCTION(key_sort);
+PHP_FUNCTION(ksort);
PHP_FUNCTION(asort);
PHP_FUNCTION(arsort);
PHP_FUNCTION(sort);
PHP_FUNCTION(rsort);
-PHP_FUNCTION(user_sort);
-PHP_FUNCTION(auser_sort);
-PHP_FUNCTION(user_key_sort);
+PHP_FUNCTION(usort);
+PHP_FUNCTION(uasort);
+PHP_FUNCTION(uksort);
PHP_FUNCTION(array_walk);
PHP_FUNCTION(count);
PHP_FUNCTION(flush);
-void array_end(INTERNAL_FUNCTION_PARAMETERS);
-void array_prev(INTERNAL_FUNCTION_PARAMETERS);
-void array_next(INTERNAL_FUNCTION_PARAMETERS);
-void array_each(INTERNAL_FUNCTION_PARAMETERS);
-void array_reset(INTERNAL_FUNCTION_PARAMETERS);
-void array_current(INTERNAL_FUNCTION_PARAMETERS);
-void array_current_key(INTERNAL_FUNCTION_PARAMETERS);
+PHP_FUNCTION(end);
+PHP_FUNCTION(prev);
+PHP_FUNCTION(next);
+PHP_FUNCTION(each);
+PHP_FUNCTION(reset);
+PHP_FUNCTION(current);
+PHP_FUNCTION(key);
PHP_FUNCTION(gettype);
PHP_FUNCTION(settype);
PHP_FUNCTION(min);
diff --git a/ext/standard/browscap.c b/ext/standard/browscap.c
index 76d93f4055..0101fa2416 100644
--- a/ext/standard/browscap.c
+++ b/ext/standard/browscap.c
@@ -30,7 +30,7 @@ static pval *found_browser_entry;
#endif
function_entry browscap_functions[] = {
- {"get_browser", php3_get_browser, NULL},
+ PHP_FE(get_browser, NULL)
{NULL, NULL, NULL}
};
diff --git a/ext/standard/crypt.c b/ext/standard/crypt.c
index 4f44a434f4..c241a0fef2 100644
--- a/ext/standard/crypt.c
+++ b/ext/standard/crypt.c
@@ -49,7 +49,7 @@ extern char *crypt(char *__key,char *__salt);
#include "php3_crypt.h"
function_entry crypt_functions[] = {
- {"crypt", php3_crypt, NULL},
+ PHP_FE(crypt, NULL)
{NULL, NULL, NULL}
};
diff --git a/ext/standard/datetime.c b/ext/standard/datetime.c
index 99038e0bd5..11cd604e9b 100644
--- a/ext/standard/datetime.c
+++ b/ext/standard/datetime.c
@@ -29,6 +29,9 @@
#include "php_globals.h"
#include <time.h>
+#ifdef HAVE_SYS_TIME_H
+# include <sys/time.h>
+#endif
#include <stdio.h>
char *mon_full_names[] =
@@ -62,6 +65,8 @@ static int phpday_tab[2][12] =
#define isleap(year) (((year%4) == 0 && (year%100)!=0) || (year%400)==0)
+extern PHPAPI time_t parsedate(char *p, struct timeval *now);
+
PHP_FUNCTION(time)
{
return_value->value.lval = (long) time(NULL);
@@ -550,6 +555,32 @@ PHP_FUNCTION(strftime)
RETURN_FALSE;
}
#endif
+
+/* {{{ proto int strtotime(string time, int now) */
+PHP_FUNCTION(strtotime)
+{
+ pval *timep, *nowp;
+ int ac;
+ struct timeval tv;
+
+ ac = ARG_COUNT(ht);
+
+ if (ac < 1 || ac > 2 || getParameters(ht, ac, &timep, &nowp)==FAILURE) {
+ WRONG_PARAM_COUNT;
+ }
+
+ convert_to_string(timep);
+ if (ac == 2) {
+ convert_to_long(nowp);
+ tv.tv_sec = nowp->value.lval;
+ tv.tv_usec = 0;
+ RETURN_LONG(parsedate(timep->value.str.val, &tv));
+ } else {
+ RETURN_LONG(parsedate(timep->value.str.val, NULL));
+ }
+}
+/* }}} */
+
/*
* Local variables:
* tab-width: 4
diff --git a/ext/standard/datetime.h b/ext/standard/datetime.h
index 0a27f5efa2..bf518fcd7f 100644
--- a/ext/standard/datetime.h
+++ b/ext/standard/datetime.h
@@ -44,6 +44,7 @@ PHP_FUNCTION(checkdate);
#if HAVE_STRFTIME
PHP_FUNCTION(strftime);
#endif
+PHP_FUNCTION(strtotime);
extern char *php3_std_date(time_t t);
void _php3_mktime(INTERNAL_FUNCTION_PARAMETERS, int gm);
diff --git a/ext/standard/dir.c b/ext/standard/dir.c
index 18fb6a8f16..3a8be1e3a6 100644
--- a/ext/standard/dir.c
+++ b/ext/standard/dir.c
@@ -45,11 +45,11 @@ static int le_dirp;
static zend_class_entry *dir_class_entry_ptr;
static zend_function_entry php_dir_functions[] = {
- PHP_FE(opendir, NULL)
- PHP_FE(closedir, NULL)
- PHP_FE(chdir, NULL)
- PHP_FE(rewinddir, NULL)
- PHP_FE(readdir, NULL)
+ PHP_FE(opendir, NULL)
+ PHP_FE(closedir, NULL)
+ PHP_FE(chdir, NULL)
+ PHP_FE(rewinddir, NULL)
+ PHP_FE(readdir, NULL)
PHP_FALIAS(dir, getdir, NULL)
{NULL, NULL, NULL}
};
diff --git a/ext/standard/dl.c b/ext/standard/dl.c
index 86c02951f9..678c5a4264 100644
--- a/ext/standard/dl.c
+++ b/ext/standard/dl.c
@@ -105,6 +105,7 @@ void php3_dl(pval *file,int type,pval *return_value)
#if MSVC5
php3_error(E_ERROR,"Unable to load dynamic library '%s'<br>\n%s",libpath,php3_win_err());
#else
+ printf("dlerror = %s\n", dlerror());
php3_error(E_ERROR,"Unable to load dynamic library '%s' - %s",libpath,dlerror());
#endif
RETURN_FALSE;
diff --git a/ext/standard/file.c b/ext/standard/file.c
index 0e651e57a0..831a372b23 100644
--- a/ext/standard/file.c
+++ b/ext/standard/file.c
@@ -196,7 +196,7 @@ function_entry php3_file_functions[] = {
PHP_FE(fseek, NULL)
PHP_FE(ftell, NULL)
PHP_FE(fwrite, NULL)
- {"fputs", php3_fwrite, NULL},
+ PHP_FALIAS(fputs, fwrite, NULL)
PHP_FE(mkdir, NULL)
PHP_FE(rename, NULL)
PHP_FE(copy, NULL)
@@ -1027,7 +1027,7 @@ PHP_FUNCTION(fwrite)
/*
wrapper for setvbuf()
*/
-void php3_set_file_buffer(INTERNAL_FUNCTION_PARAMETERS)
+PHP_FUNCTION(set_file_buffer)
{
pval *arg1, *arg2;
FILE *fp;
diff --git a/ext/standard/filestat.c b/ext/standard/filestat.c
index 0382f58af1..77786c63e5 100644
--- a/ext/standard/filestat.c
+++ b/ext/standard/filestat.c
@@ -442,39 +442,40 @@ FileFunction(php3_fileatime,5)
FileFunction(php3_filemtime,6)
FileFunction(php3_filectime,7)
FileFunction(php3_filetype, 8)
-FileFunction(php3_iswritable, 9)
-FileFunction(php3_isreadable,10)
-FileFunction(php3_isexec,11)
-FileFunction(php3_isfile,12)
-FileFunction(php3_isdir,13)
-FileFunction(php3_islink,14)
-FileFunction(php3_fileexists,15)
+FileFunction(php3_is_writable, 9)
+FileFunction(php3_is_readable,10)
+FileFunction(php3_is_executable,11)
+FileFunction(php3_is_file,12)
+FileFunction(php3_is_dir,13)
+FileFunction(php3_is_link,14)
+FileFunction(php3_file_exists,15)
FileFunction(php3_lstat,16)
FileFunction(php3_stat,17)
function_entry php3_filestat_functions[] = {
- {"fileatime", php3_fileatime, NULL},
- {"filectime", php3_filectime, NULL},
- {"filegroup", php3_filegroup, NULL},
- {"fileinode", php3_fileinode, NULL},
- {"filemtime", php3_filemtime, NULL},
- {"fileowner", php3_fileowner, NULL},
- {"fileperms", php3_fileperms, NULL},
- {"filesize", php3_filesize, NULL},
- {"filetype", php3_filetype, NULL},
- {"file_exists", php3_fileexists, NULL},
- {"is_writeable",php3_iswritable, NULL},
- {"is_readable", php3_isreadable, NULL},
- {"is_executable",php3_isexec, NULL},
- {"is_file", php3_isfile, NULL},
- {"is_dir", php3_isdir, NULL},
- {"is_link", php3_islink, NULL},
- {"stat", php3_stat, NULL},
- {"lstat", php3_lstat, NULL},
- {"chown", php3_chown, NULL},
- {"chgrp", php3_chgrp, NULL},
- {"chmod", php3_chmod, NULL},
- {"touch", php3_touch, NULL},
+ PHP_FE(fileatime, NULL)
+ PHP_FE(filectime, NULL)
+ PHP_FE(filegroup, NULL)
+ PHP_FE(fileinode, NULL)
+ PHP_FE(filemtime, NULL)
+ PHP_FE(fileowner, NULL)
+ PHP_FE(fileperms, NULL)
+ PHP_FE(filesize, NULL)
+ PHP_FE(filetype, NULL)
+ PHP_FE(file_exists, NULL)
+ PHP_FE(is_writable, NULL)
+ PHP_FE(is_readable, NULL)
+ PHP_FE(is_executable, NULL)
+ PHP_FE(is_file, NULL)
+ PHP_FE(is_dir, NULL)
+ PHP_FE(is_link, NULL)
+ PHP_FE(stat, NULL)
+ PHP_FE(lstat, NULL)
+ PHP_FE(chown, NULL)
+ PHP_FE(chgrp, NULL)
+ PHP_FE(chmod, NULL)
+ PHP_FE(touch, NULL)
+ PHP_FE(clearstatcache, NULL)
{NULL, NULL, NULL}
};
diff --git a/ext/standard/fsock.c b/ext/standard/fsock.c
index cc000f42b4..2901221a70 100644
--- a/ext/standard/fsock.c
+++ b/ext/standard/fsock.c
@@ -83,8 +83,8 @@ extern int le_fp;
static unsigned char third_and_fourth_args_force_ref[] = { 4, BYREF_NONE, BYREF_NONE, BYREF_FORCE, BYREF_FORCE };
function_entry fsock_functions[] = {
- PHP_FE(fsockopen, third_and_fourth_args_force_ref)
- PHP_FE(pfsockopen, third_and_fourth_args_force_ref)
+ PHP_FE(fsockopen, third_and_fourth_args_force_ref)
+ PHP_FE(pfsockopen, third_and_fourth_args_force_ref)
{NULL, NULL, NULL}
};
@@ -248,7 +248,7 @@ static void _php3_fsockopen(INTERNAL_FUNCTION_PARAMETERS, int persistent) {
switch(arg_count) {
case 5:
convert_to_double(args[4]);
- conv = args[4]->value.dval * 1000000.0;
+ conv = (unsigned long) (args[4]->value.dval * 1000000.0);
timeout.tv_sec = conv / 1000000;
timeout.tv_usec = conv % 1000000;
/* fall-through */
diff --git a/ext/standard/head.c b/ext/standard/head.c
index cfc6930f7d..2b9c60dca5 100644
--- a/ext/standard/head.c
+++ b/ext/standard/head.c
@@ -418,8 +418,8 @@ CookieList *php3_PopCookieList(void)
return (ret);
}
-/* php3_SetCookie(name,value,expires,path,domain,secure) */
-PHP_FUNCTION(SetCookie)
+/* php3_setcookie(name,value,expires,path,domain,secure) */
+PHP_FUNCTION(setcookie)
{
char *cookie;
int len=sizeof("Set-Cookie: ");
diff --git a/ext/standard/head.h b/ext/standard/head.h
index a8096ecaca..542d95ffaf 100644
--- a/ext/standard/head.h
+++ b/ext/standard/head.h
@@ -54,7 +54,7 @@ extern php3_module_entry php3_header_module_entry;
extern int php3_init_head(INIT_FUNC_ARGS);
PHP_FUNCTION(Header);
-PHP_FUNCTION(SetCookie);
+PHP_FUNCTION(setcookie);
PHP_FUNCTION(headers_sent);
void php4i_add_header_information(char *header_information, uint header_length);
diff --git a/ext/standard/link.c b/ext/standard/link.c
index 635727b738..c6a2e51686 100644
--- a/ext/standard/link.c
+++ b/ext/standard/link.c
@@ -183,11 +183,11 @@ PHP_FUNCTION(unlink)
/* }}} */
function_entry link_functions[] = {
- {"readlink", php3_readlink, NULL},
- {"linkinfo", php3_linkinfo, NULL},
- {"symlink", php3_symlink, NULL},
- {"link", php3_link, NULL},
- {"unlink", php3_unlink, NULL},
+ PHP_FE(readlink, NULL)
+ PHP_FE(linkinfo, NULL)
+ PHP_FE(symlink, NULL)
+ PHP_FE(link, NULL)
+ PHP_FE(unlink, NULL)
{NULL, NULL, NULL}
};
diff --git a/ext/standard/mail.c b/ext/standard/mail.c
index 2d17a9c6e9..5896ced403 100644
--- a/ext/standard/mail.c
+++ b/ext/standard/mail.c
@@ -40,7 +40,7 @@
#endif
function_entry mail_functions[] = {
- {"mail", php3_mail, NULL},
+ PHP_FE(mail, NULL)
{NULL, NULL, NULL}
};
diff --git a/ext/standard/microtime.h b/ext/standard/microtime.h
index fb4329d449..a14b75749d 100644
--- a/ext/standard/microtime.h
+++ b/ext/standard/microtime.h
@@ -33,5 +33,6 @@
#define _MICROTIME_H
PHP_FUNCTION(microtime);
+PHP_FUNCTION(getrusage);
#endif /* _MICROTIME_H */
diff --git a/ext/standard/pack.c b/ext/standard/pack.c
index e86ff9d6e9..4754c5606d 100644
--- a/ext/standard/pack.c
+++ b/ext/standard/pack.c
@@ -51,8 +51,8 @@
#endif
function_entry pack_functions[] = {
- {"pack", php3_pack, NULL},
- {"unpack", php3_unpack, NULL},
+ PHP_FE(pack, NULL)
+ PHP_FE(unpack, NULL)
{NULL, NULL, NULL}
};
diff --git a/ext/standard/parsedate.y b/ext/standard/parsedate.y
new file mode 100644
index 0000000000..6552c517a2
--- /dev/null
+++ b/ext/standard/parsedate.y
@@ -0,0 +1,919 @@
+%{
+/* $Revision$
+**
+** Originally written by Steven M. Bellovin <smb@research.att.com> while
+** at the University of North Carolina at Chapel Hill. Later tweaked by
+** a couple of people on Usenet. Completely overhauled by Rich $alz
+** <rsalz@osf.org> and Jim Berets <jberets@bbn.com> in August, 1990.
+** Further revised (removed obsolete constructs and cleaned up timezone
+** names) in August, 1991, by Rich. Paul Eggert <eggert@twinsun.com>
+** helped in September, 1992.
+**
+** This grammar has six shift/reduce conflicts.
+**
+** This code is in the public domain and has no copyright.
+*/
+/* SUPPRESS 530 *//* Empty body for statement */
+/* SUPPRESS 593 on yyerrlab *//* Label was not used */
+/* SUPPRESS 593 on yynewstate *//* Label was not used */
+/* SUPPRESS 595 on yypvt *//* Automatic variable may be used before set */
+
+#ifdef WIN32
+# include "config.w32.h"
+#else
+# include "php_config.h"
+#endif
+
+#if WIN32||WINNT
+#include <malloc.h>
+#endif
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <time.h>
+
+#ifdef HAVE_SYS_TIME_H
+# include <sys/time.h>
+#endif
+#ifdef WIN32
+# include "win32/time.h"
+#endif
+
+#include <ctype.h>
+
+#if defined(_HPUX_SOURCE)
+#include <alloca.h>
+#endif
+
+#if WIN32||WINNT
+#include <time.h>
+#else
+# if !defined(HAVE_TM_ZONE) && !defined(_TIMEZONE)
+extern time_t timezone;
+# endif
+#endif
+
+#define yylhs date_yylhs
+#define yylen date_yylen
+#define yydefred date_yydefred
+#define yydgoto date_yydgoto
+#define yysindex date_yysindex
+#define yyrindex date_yyrindex
+#define yygindex date_yygindex
+#define yytable date_yytable
+#define yycheck date_yycheck
+#define yyparse date_parse
+#define yylex date_lex
+#define yyerror date_error
+
+static int date_lex(void);
+
+ /* See the LeapYears table in Convert. */
+#define EPOCH 1970
+#define END_OF_TIME 2038
+ /* Constants for general time calculations. */
+#define DST_OFFSET 1
+#define SECSPERDAY (24L * 60L * 60L)
+ /* Readability for TABLE stuff. */
+#define HOUR(x) (x * 60)
+
+#define LPAREN '('
+#define RPAREN ')'
+#define IS7BIT(x) ((unsigned int)(x) < 0200)
+
+/*
+** Get the number of elements in a fixed-size array, or a pointer just
+** past the end of it.
+*/
+#define SIZEOF(array) ((int)(sizeof array / sizeof array[0]))
+#define ENDOF(array) (&array[SIZEOF(array)])
+#define CTYPE(isXXXXX, c) ((isascii((c)) && isXXXXX((c))))
+
+typedef struct _TIMEINFO {
+ time_t time;
+ long usec;
+ long tzone;
+} TIMEINFO;
+
+typedef char const *STRING;
+typedef char * const CSTRING;
+
+/*
+** An entry in the lexical lookup table.
+*/
+typedef struct _TABLE {
+ STRING name;
+ int type;
+ time_t value;
+} TABLE;
+
+/*
+** Daylight-savings mode: on, off, or not yet known.
+*/
+typedef enum _DSTMODE {
+ DSTon, DSToff, DSTmaybe
+} DSTMODE;
+
+/*
+** Meridian: am, pm, or 24-hour style.
+*/
+typedef enum _MERIDIAN {
+ MERam, MERpm, MER24
+} MERIDIAN;
+
+
+/*
+** Global variables. We could get rid of most of them by using a yacc
+** union, but this is more efficient. (This routine predates the
+** yacc %union construct.)
+*/
+static char *yyInput;
+static DSTMODE yyDSTmode;
+static int yyHaveDate;
+static int yyHaveRel;
+static int yyHaveTime;
+static time_t yyTimezone;
+static time_t yyDay;
+static time_t yyHour;
+static time_t yyMinutes;
+static time_t yyMonth;
+static time_t yySeconds;
+static time_t yyYear;
+static MERIDIAN yyMeridian;
+static time_t yyRelMonth;
+static time_t yyRelSeconds;
+
+
+extern struct tm *localtime();
+
+static void date_error();
+%}
+
+%expect 6
+
+%union {
+ time_t Number;
+ enum _MERIDIAN Meridian;
+}
+
+%token tDAY tDAYZONE tMERIDIAN tMONTH tMONTH_UNIT tSEC_UNIT tSNUMBER
+%token tUNUMBER tZONE
+
+%type <Number> tDAYZONE tMONTH tMONTH_UNIT tSEC_UNIT
+%type <Number> tSNUMBER tUNUMBER tZONE numzone zone
+%type <Meridian> tMERIDIAN o_merid
+
+%%
+
+spec : /* NULL */
+ | spec item
+ ;
+
+item : time {
+ yyHaveTime++;
+#if defined(lint)
+ /* I am compulsive about lint natterings... */
+ if (yyHaveTime == -1) {
+ YYERROR;
+ }
+#endif /* defined(lint) */
+ }
+ | time zone {
+ yyHaveTime++;
+ yyTimezone = $2;
+ }
+ | date {
+ yyHaveDate++;
+ }
+ | rel {
+ yyHaveRel = 1;
+ }
+ ;
+
+time : tUNUMBER o_merid {
+ if ($1 < 100) {
+ yyHour = $1;
+ yyMinutes = 0;
+ }
+ else {
+ yyHour = $1 / 100;
+ yyMinutes = $1 % 100;
+ }
+ yySeconds = 0;
+ yyMeridian = $2;
+ }
+ | tUNUMBER ':' tUNUMBER o_merid {
+ yyHour = $1;
+ yyMinutes = $3;
+ yySeconds = 0;
+ yyMeridian = $4;
+ }
+ | tUNUMBER ':' tUNUMBER numzone {
+ yyHour = $1;
+ yyMinutes = $3;
+ yyTimezone = $4;
+ yyMeridian = MER24;
+ yyDSTmode = DSToff;
+ }
+ | tUNUMBER ':' tUNUMBER ':' tUNUMBER o_merid {
+ yyHour = $1;
+ yyMinutes = $3;
+ yySeconds = $5;
+ yyMeridian = $6;
+ }
+ | tUNUMBER ':' tUNUMBER ':' tUNUMBER numzone {
+ yyHour = $1;
+ yyMinutes = $3;
+ yySeconds = $5;
+ yyTimezone = $6;
+ yyMeridian = MER24;
+ yyDSTmode = DSToff;
+ }
+ ;
+
+zone : tZONE {
+ $$ = $1;
+ yyDSTmode = DSToff;
+ }
+ | tDAYZONE {
+ $$ = $1;
+ yyDSTmode = DSTon;
+ }
+ | tZONE numzone {
+ /* Only allow "GMT+300" and "GMT-0800" */
+ if ($1 != 0) {
+ YYABORT;
+ }
+ $$ = $2;
+ yyDSTmode = DSToff;
+ }
+ | numzone {
+ $$ = $1;
+ yyDSTmode = DSToff;
+ }
+ ;
+
+numzone : tSNUMBER {
+ int i;
+
+ /* Unix and GMT and numeric timezones -- a little confusing. */
+ if ($1 < 0) {
+ /* Don't work with negative modulus. */
+ $1 = -$1;
+ if ($1 > 9999 || (i = $1 % 100) >= 60) {
+ YYABORT;
+ }
+ $$ = ($1 / 100) * 60 + i;
+ }
+ else {
+ if ($1 > 9999 || (i = $1 % 100) >= 60) {
+ YYABORT;
+ }
+ $$ = -(($1 / 100) * 60 + i);
+ }
+ }
+ ;
+
+date : tUNUMBER '/' tUNUMBER {
+ yyMonth = $1;
+ yyDay = $3;
+ }
+ | tUNUMBER '/' tUNUMBER '/' tUNUMBER {
+ if ($1 > 100) {
+ /* assume YYYY/MM/DD format, so need not to add 1900 */
+ yyYear = $1;
+ yyMonth = $3;
+ yyDay = $5;
+ }
+ else {
+ /* assume MM/DD/YY* format */
+ yyMonth = $1;
+ yyDay = $3;
+ if ($5 > 100) {
+ /* assume year is YYYY format, so need not to add 1900 */
+ yyYear = $5;
+ } else {
+ /* assume year is YY format, so need to add 1900 */
+ yyYear = $5 + 1900;
+ }
+ }
+ }
+ | tMONTH tUNUMBER {
+ yyMonth = $1;
+ yyDay = $2;
+ }
+ | tMONTH tUNUMBER ',' tUNUMBER {
+ yyMonth = $1;
+ yyDay = $2;
+ if ($4 > 100) {
+ /* assume year is YYYY format, so need not to add 1900 */
+ yyYear = $4;
+ } else {
+ /* assume year is YY format, so need to add 1900 */
+ yyYear = $4 + 1900;
+ }
+ }
+ | tUNUMBER tMONTH {
+ yyDay = $1;
+ yyMonth = $2;
+ }
+ | tUNUMBER tMONTH tUNUMBER {
+ yyDay = $1;
+ yyMonth = $2;
+ if ($3 > 100) {
+ /* assume year is YYYY format, so need not to add 1900 */
+ yyYear = $3;
+ } else {
+ /* assume year is YY format, so need to add 1900 */
+ yyYear = $3 + 1900;
+ }
+ }
+ | tDAY ',' tUNUMBER tMONTH tUNUMBER {
+ yyDay = $3;
+ yyMonth = $4;
+ if ($5 > 100) {
+ /* assume year is YYYY format, so need not to add 1900 */
+ yyYear = $5;
+ } else {
+ /* assume year is YY format, so need to add 1900 */
+ yyYear = $5 + 1900;
+ }
+ }
+ ;
+
+rel : tSNUMBER tSEC_UNIT {
+ yyRelSeconds += $1 * $2;
+ }
+ | tUNUMBER tSEC_UNIT {
+ yyRelSeconds += $1 * $2;
+ }
+ | tSNUMBER tMONTH_UNIT {
+ yyRelMonth += $1 * $2;
+ }
+ | tUNUMBER tMONTH_UNIT {
+ yyRelMonth += $1 * $2;
+ }
+ ;
+
+o_merid : /* NULL */ {
+ $$ = MER24;
+ }
+ | tMERIDIAN {
+ $$ = $1;
+ }
+ ;
+
+%%
+
+/* Month and day table. */
+static TABLE MonthDayTable[] = {
+ { "january", tMONTH, 1 },
+ { "february", tMONTH, 2 },
+ { "march", tMONTH, 3 },
+ { "april", tMONTH, 4 },
+ { "may", tMONTH, 5 },
+ { "june", tMONTH, 6 },
+ { "july", tMONTH, 7 },
+ { "august", tMONTH, 8 },
+ { "september", tMONTH, 9 },
+ { "october", tMONTH, 10 },
+ { "november", tMONTH, 11 },
+ { "december", tMONTH, 12 },
+ /* The value of the day isn't used... */
+ { "sunday", tDAY, 0 },
+ { "monday", tDAY, 0 },
+ { "tuesday", tDAY, 0 },
+ { "wednesday", tDAY, 0 },
+ { "thursday", tDAY, 0 },
+ { "friday", tDAY, 0 },
+ { "saturday", tDAY, 0 },
+};
+
+/* Time units table. */
+static TABLE UnitsTable[] = {
+ { "year", tMONTH_UNIT, 12 },
+ { "month", tMONTH_UNIT, 1 },
+ { "week", tSEC_UNIT, 7 * 24 * 60 * 60 },
+ { "day", tSEC_UNIT, 1 * 24 * 60 * 60 },
+ { "hour", tSEC_UNIT, 60 * 60 },
+ { "minute", tSEC_UNIT, 60 },
+ { "min", tSEC_UNIT, 60 },
+ { "second", tSEC_UNIT, 1 },
+ { "sec", tSEC_UNIT, 1 },
+};
+
+/* Timezone table. */
+static TABLE TimezoneTable[] = {
+ { "gmt", tZONE, HOUR( 0) }, /* Greenwich Mean */
+ { "ut", tZONE, HOUR( 0) }, /* Universal */
+ { "utc", tZONE, HOUR( 0) }, /* Universal Coordinated */
+ { "cut", tZONE, HOUR( 0) }, /* Coordinated Universal */
+ { "z", tZONE, HOUR( 0) }, /* Greenwich Mean */
+ { "wet", tZONE, HOUR( 0) }, /* Western European */
+ { "bst", tDAYZONE, HOUR( 0) }, /* British Summer */
+ { "nst", tZONE, HOUR(3)+30 }, /* Newfoundland Standard */
+ { "ndt", tDAYZONE, HOUR(3)+30 }, /* Newfoundland Daylight */
+ { "ast", tZONE, HOUR( 4) }, /* Atlantic Standard */
+ { "adt", tDAYZONE, HOUR( 4) }, /* Atlantic Daylight */
+ { "est", tZONE, HOUR( 5) }, /* Eastern Standard */
+ { "edt", tDAYZONE, HOUR( 5) }, /* Eastern Daylight */
+ { "cst", tZONE, HOUR( 6) }, /* Central Standard */
+ { "cdt", tDAYZONE, HOUR( 6) }, /* Central Daylight */
+ { "mst", tZONE, HOUR( 7) }, /* Mountain Standard */
+ { "mdt", tDAYZONE, HOUR( 7) }, /* Mountain Daylight */
+ { "pst", tZONE, HOUR( 8) }, /* Pacific Standard */
+ { "pdt", tDAYZONE, HOUR( 8) }, /* Pacific Daylight */
+ { "yst", tZONE, HOUR( 9) }, /* Yukon Standard */
+ { "ydt", tDAYZONE, HOUR( 9) }, /* Yukon Daylight */
+ { "akst", tZONE, HOUR( 9) }, /* Alaska Standard */
+ { "akdt", tDAYZONE, HOUR( 9) }, /* Alaska Daylight */
+ { "hst", tZONE, HOUR(10) }, /* Hawaii Standard */
+ { "hast", tZONE, HOUR(10) }, /* Hawaii-Aleutian Standard */
+ { "hadt", tDAYZONE, HOUR(10) }, /* Hawaii-Aleutian Daylight */
+ { "ces", tDAYZONE, -HOUR(1) }, /* Central European Summer */
+ { "cest", tDAYZONE, -HOUR(1) }, /* Central European Summer */
+ { "mez", tZONE, -HOUR(1) }, /* Middle European */
+ { "mezt", tDAYZONE, -HOUR(1) }, /* Middle European Summer */
+ { "cet", tZONE, -HOUR(1) }, /* Central European */
+ { "met", tZONE, -HOUR(1) }, /* Middle European */
+ { "eet", tZONE, -HOUR(2) }, /* Eastern Europe */
+ { "msk", tZONE, -HOUR(3) }, /* Moscow Winter */
+ { "msd", tDAYZONE, -HOUR(3) }, /* Moscow Summer */
+ { "wast", tZONE, -HOUR(8) }, /* West Australian Standard */
+ { "wadt", tDAYZONE, -HOUR(8) }, /* West Australian Daylight */
+ { "hkt", tZONE, -HOUR(8) }, /* Hong Kong */
+ { "cct", tZONE, -HOUR(8) }, /* China Coast */
+ { "jst", tZONE, -HOUR(9) }, /* Japan Standard */
+ { "kst", tZONE, -HOUR(9) }, /* Korean Standard */
+ { "kdt", tZONE, -HOUR(9) }, /* Korean Daylight */
+ { "cast", tZONE, -(HOUR(9)+30) }, /* Central Australian Standard */
+ { "cadt", tDAYZONE, -(HOUR(9)+30) }, /* Central Australian Daylight */
+ { "east", tZONE, -HOUR(10) }, /* Eastern Australian Standard */
+ { "eadt", tDAYZONE, -HOUR(10) }, /* Eastern Australian Daylight */
+ { "nzst", tZONE, -HOUR(12) }, /* New Zealand Standard */
+ { "nzdt", tDAYZONE, -HOUR(12) }, /* New Zealand Daylight */
+
+ /* For completeness we include the following entries. */
+#if 0
+
+ /* Duplicate names. Either they conflict with a zone listed above
+ * (which is either more likely to be seen or just been in circulation
+ * longer), or they conflict with another zone in this section and
+ * we could not reasonably choose one over the other. */
+ { "fst", tZONE, HOUR( 2) }, /* Fernando De Noronha Standard */
+ { "fdt", tDAYZONE, HOUR( 2) }, /* Fernando De Noronha Daylight */
+ { "bst", tZONE, HOUR( 3) }, /* Brazil Standard */
+ { "est", tZONE, HOUR( 3) }, /* Eastern Standard (Brazil) */
+ { "edt", tDAYZONE, HOUR( 3) }, /* Eastern Daylight (Brazil) */
+ { "wst", tZONE, HOUR( 4) }, /* Western Standard (Brazil) */
+ { "wdt", tDAYZONE, HOUR( 4) }, /* Western Daylight (Brazil) */
+ { "cst", tZONE, HOUR( 5) }, /* Chile Standard */
+ { "cdt", tDAYZONE, HOUR( 5) }, /* Chile Daylight */
+ { "ast", tZONE, HOUR( 5) }, /* Acre Standard */
+ { "adt", tDAYZONE, HOUR( 5) }, /* Acre Daylight */
+ { "cst", tZONE, HOUR( 5) }, /* Cuba Standard */
+ { "cdt", tDAYZONE, HOUR( 5) }, /* Cuba Daylight */
+ { "est", tZONE, HOUR( 6) }, /* Easter Island Standard */
+ { "edt", tDAYZONE, HOUR( 6) }, /* Easter Island Daylight */
+ { "sst", tZONE, HOUR(11) }, /* Samoa Standard */
+ { "ist", tZONE, -HOUR(2) }, /* Israel Standard */
+ { "idt", tDAYZONE, -HOUR(2) }, /* Israel Daylight */
+ { "idt", tDAYZONE, -(HOUR(3)+30) }, /* Iran Daylight */
+ { "ist", tZONE, -(HOUR(3)+30) }, /* Iran Standard */
+ { "cst", tZONE, -HOUR(8) }, /* China Standard */
+ { "cdt", tDAYZONE, -HOUR(8) }, /* China Daylight */
+ { "sst", tZONE, -HOUR(8) }, /* Singapore Standard */
+
+ /* Dubious (e.g., not in Olson's TIMEZONE package) or obsolete. */
+ { "gst", tZONE, HOUR( 3) }, /* Greenland Standard */
+ { "wat", tZONE, -HOUR(1) }, /* West Africa */
+ { "at", tZONE, HOUR( 2) }, /* Azores */
+ { "gst", tZONE, -HOUR(10) }, /* Guam Standard */
+ { "nft", tZONE, HOUR(3)+30 }, /* Newfoundland */
+ { "idlw", tZONE, HOUR(12) }, /* International Date Line West */
+ { "mewt", tZONE, -HOUR(1) }, /* Middle European Winter */
+ { "mest", tDAYZONE, -HOUR(1) }, /* Middle European Summer */
+ { "swt", tZONE, -HOUR(1) }, /* Swedish Winter */
+ { "sst", tDAYZONE, -HOUR(1) }, /* Swedish Summer */
+ { "fwt", tZONE, -HOUR(1) }, /* French Winter */
+ { "fst", tDAYZONE, -HOUR(1) }, /* French Summer */
+ { "bt", tZONE, -HOUR(3) }, /* Baghdad */
+ { "it", tZONE, -(HOUR(3)+30) }, /* Iran */
+ { "zp4", tZONE, -HOUR(4) }, /* USSR Zone 3 */
+ { "zp5", tZONE, -HOUR(5) }, /* USSR Zone 4 */
+ { "ist", tZONE, -(HOUR(5)+30) }, /* Indian Standard */
+ { "zp6", tZONE, -HOUR(6) }, /* USSR Zone 5 */
+ { "nst", tZONE, -HOUR(7) }, /* North Sumatra */
+ { "sst", tZONE, -HOUR(7) }, /* South Sumatra */
+ { "jt", tZONE, -(HOUR(7)+30) }, /* Java (3pm in Cronusland!) */
+ { "nzt", tZONE, -HOUR(12) }, /* New Zealand */
+ { "idle", tZONE, -HOUR(12) }, /* International Date Line East */
+ { "cat", tZONE, HOUR(10) }, /* -- expired 1967 */
+ { "nt", tZONE, HOUR(11) }, /* -- expired 1967 */
+ { "ahst", tZONE, HOUR(10) }, /* -- expired 1983 */
+ { "hdt", tDAYZONE, HOUR(10) }, /* -- expired 1986 */
+#endif /* 0 */
+};
+
+
+
+/* ARGSUSED */
+static void
+date_error(s)
+ char *s;
+{
+ /* NOTREACHED */
+}
+
+int GetTimeInfo(TIMEINFO *Now)
+{
+ static time_t NextHour;
+ static long LastTzone;
+ struct tm *tm;
+ int secondsUntilNextHour;
+#if defined(HAVE_GETTIMEOFDAY)
+ struct timeval tv;
+#endif /* defined(HAVE_GETTIMEOFDAY) */
+#if !defined(HAVE_TM_GMTOFF)
+ struct tm local;
+ struct tm gmt;
+#endif /* !defined(HAVE_TM_GMTOFF) */
+
+ /* Get the basic time. */
+#if defined(HAVE_GETTIMEOFDAY)
+ if (gettimeofday(&tv, (struct timezone *)NULL) == -1)
+ return -1;
+ Now->time = tv.tv_sec;
+ Now->usec = tv.tv_usec;
+#else
+ /* Can't check for -1 since that might be a time, I guess. */
+ (void)time(&Now->time);
+ Now->usec = 0;
+#endif /* defined(HAVE_GETTIMEOFDAY) */
+
+ /* Now get the timezone if the last time < HH:00:00 <= now for some HH. */
+ if (NextHour <= Now->time) {
+ if ((tm = localtime(&Now->time)) == NULL)
+ return -1;
+ secondsUntilNextHour = 60 * (60 - tm->tm_min) - tm->tm_sec;
+#if !defined(HAVE_TM_GMTOFF)
+ /* To get the timezone, compare localtime with GMT. */
+ local = *tm;
+ if ((tm = gmtime(&Now->time)) == NULL)
+ return -1;
+ gmt = *tm;
+
+ /* Assume we are never more than 24 hours away. */
+ LastTzone = gmt.tm_yday - local.tm_yday;
+ if (LastTzone > 1)
+ LastTzone = -24;
+ else if (LastTzone < -1)
+ LastTzone = 24;
+ else
+ LastTzone *= 24;
+
+ /* Scale in the hours and minutes; ignore seconds. */
+ LastTzone += gmt.tm_hour - local.tm_hour;
+ LastTzone *= 60;
+ LastTzone += gmt.tm_min - local.tm_min;
+#else
+ LastTzone = (0 - tm->tm_gmtoff) / 60;
+#endif /* defined(HAVE_TM_GMTOFF) */
+ NextHour = Now->time + secondsUntilNextHour;
+ }
+ Now->tzone = LastTzone;
+ return 0;
+}
+
+
+static time_t
+ToSeconds(Hours, Minutes, Seconds, Meridian)
+ time_t Hours;
+ time_t Minutes;
+ time_t Seconds;
+ MERIDIAN Meridian;
+{
+ if (Minutes < 0 || Minutes > 59 || Seconds < 0 || Seconds > 61)
+ return -1;
+ if (Meridian == MER24) {
+ if (Hours < 0 || Hours > 23)
+ return -1;
+ }
+ else {
+ if (Hours < 1 || Hours > 12)
+ return -1;
+ if (Hours == 12)
+ Hours = 0;
+ if (Meridian == MERpm)
+ Hours += 12;
+ }
+ return (Hours * 60L + Minutes) * 60L + Seconds;
+}
+
+
+static time_t
+Convert(Month, Day, Year, Hours, Minutes, Seconds, Meridian, dst)
+ time_t Month;
+ time_t Day;
+ time_t Year;
+ time_t Hours;
+ time_t Minutes;
+ time_t Seconds;
+ MERIDIAN Meridian;
+ DSTMODE dst;
+{
+ static int DaysNormal[13] = {
+ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
+ };
+ static int DaysLeap[13] = {
+ 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
+ };
+ static int LeapYears[] = {
+ 1972, 1976, 1980, 1984, 1988, 1992, 1996,
+ 2000, 2004, 2008, 2012, 2016, 2020, 2024, 2028, 2032, 2036
+ };
+ int *yp;
+ int *mp;
+ time_t Julian;
+ int i;
+ time_t tod;
+
+ /* Year should not be passed as a relative value, but absolute one.
+ so this should not happen, but just ensure it */
+ if (Year < 0)
+ Year = -Year;
+ if (Year < 100)
+ Year += 1900;
+ if (Year < EPOCH)
+ Year += 100;
+ for (mp = DaysNormal, yp = LeapYears; yp < ENDOF(LeapYears); yp++)
+ if (Year == *yp) {
+ mp = DaysLeap;
+ break;
+ }
+ if (Year < EPOCH || Year > END_OF_TIME
+ || Month < 1 || Month > 12
+ /* NOSTRICT *//* conversion from long may lose accuracy */
+ || Day < 1 || Day > mp[(int)Month])
+ return -1;
+
+ Julian = Day - 1 + (Year - EPOCH) * 365;
+ for (yp = LeapYears; yp < ENDOF(LeapYears); yp++, Julian++)
+ if (Year <= *yp)
+ break;
+ for (i = 1; i < Month; i++)
+ Julian += *++mp;
+ Julian *= SECSPERDAY;
+ Julian += yyTimezone * 60L;
+ if ((tod = ToSeconds(Hours, Minutes, Seconds, Meridian)) < 0)
+ return -1;
+ Julian += tod;
+ tod = Julian;
+ if (dst == DSTon || (dst == DSTmaybe && localtime(&tod)->tm_isdst))
+ Julian -= DST_OFFSET * 60 * 60;
+ return Julian;
+}
+
+
+static time_t
+DSTcorrect(Start, Future)
+ time_t Start;
+ time_t Future;
+{
+ time_t StartDay;
+ time_t FutureDay;
+
+ StartDay = (localtime(&Start)->tm_hour + 1) % 24;
+ FutureDay = (localtime(&Future)->tm_hour + 1) % 24;
+ return (Future - Start) + (StartDay - FutureDay) * DST_OFFSET * 60 * 60;
+}
+
+
+static time_t
+RelativeMonth(Start, RelMonth)
+ time_t Start;
+ time_t RelMonth;
+{
+ struct tm *tm;
+ time_t Month;
+ time_t Year;
+
+ tm = localtime(&Start);
+ Month = 12 * tm->tm_year + tm->tm_mon + RelMonth;
+ Year = Month / 12;
+ Year += 1900;
+ Month = Month % 12 + 1;
+ return DSTcorrect(Start,
+ Convert(Month, (time_t)tm->tm_mday, Year,
+ (time_t)tm->tm_hour, (time_t)tm->tm_min, (time_t)tm->tm_sec,
+ MER24, DSTmaybe));
+}
+
+
+static int LookupWord(char *buff, int length)
+{
+ char *p;
+ STRING q;
+ TABLE *tp;
+ int c;
+
+ p = buff;
+ c = p[0];
+
+ /* See if we have an abbreviation for a month. */
+ if (length == 3 || (length == 4 && p[3] == '.'))
+ for (tp = MonthDayTable; tp < ENDOF(MonthDayTable); tp++) {
+ q = tp->name;
+ if (c == q[0] && p[1] == q[1] && p[2] == q[2]) {
+ yylval.Number = tp->value;
+ return tp->type;
+ }
+ }
+ else
+ for (tp = MonthDayTable; tp < ENDOF(MonthDayTable); tp++)
+ if (c == tp->name[0] && strcmp(p, tp->name) == 0) {
+ yylval.Number = tp->value;
+ return tp->type;
+ }
+
+ /* Try for a timezone. */
+ for (tp = TimezoneTable; tp < ENDOF(TimezoneTable); tp++)
+ if (c == tp->name[0] && p[1] == tp->name[1]
+ && strcmp(p, tp->name) == 0) {
+ yylval.Number = tp->value;
+ return tp->type;
+ }
+
+ /* Try the units table. */
+ for (tp = UnitsTable; tp < ENDOF(UnitsTable); tp++)
+ if (c == tp->name[0] && strcmp(p, tp->name) == 0) {
+ yylval.Number = tp->value;
+ return tp->type;
+ }
+
+ /* Strip off any plural and try the units table again. */
+ if (--length > 0 && p[length] == 's') {
+ p[length] = '\0';
+ for (tp = UnitsTable; tp < ENDOF(UnitsTable); tp++)
+ if (c == tp->name[0] && strcmp(p, tp->name) == 0) {
+ p[length] = 's';
+ yylval.Number = tp->value;
+ return tp->type;
+ }
+ p[length] = 's';
+ }
+ length++;
+
+ /* Drop out any periods. */
+ for (p = buff, q = (STRING)buff; *q; q++)
+ if (*q != '.')
+ *p++ = *q;
+ *p = '\0';
+
+ /* Try the meridians. */
+ if (buff[1] == 'm' && buff[2] == '\0') {
+ if (buff[0] == 'a') {
+ yylval.Meridian = MERam;
+ return tMERIDIAN;
+ }
+ if (buff[0] == 'p') {
+ yylval.Meridian = MERpm;
+ return tMERIDIAN;
+ }
+ }
+
+ /* If we saw any periods, try the timezones again. */
+ if (p - buff != length) {
+ c = buff[0];
+ for (p = buff, tp = TimezoneTable; tp < ENDOF(TimezoneTable); tp++)
+ if (c == tp->name[0] && p[1] == tp->name[1]
+ && strcmp(p, tp->name) == 0) {
+ yylval.Number = tp->value;
+ return tp->type;
+ }
+ }
+
+ /* Unknown word -- assume GMT timezone. */
+ yylval.Number = 0;
+ return tZONE;
+}
+
+
+static int date_lex(void)
+{
+ char c;
+ char *p;
+ char buff[20];
+ int sign;
+ int i;
+ int nesting;
+
+ for ( ; ; ) {
+ /* Get first character after the whitespace. */
+ for ( ; ; ) {
+ while (CTYPE(isspace, (int)*yyInput))
+ yyInput++;
+ c = *yyInput;
+
+ /* Ignore RFC 822 comments, typically time zone names. */
+ if (c != LPAREN)
+ break;
+ for (nesting = 1; (c = *++yyInput) != RPAREN || --nesting; )
+ if (c == LPAREN)
+ nesting++;
+ else if (!IS7BIT(c) || c == '\0' || c == '\r'
+ || (c == '\\' && ((c = *++yyInput) == '\0' || !IS7BIT(c))))
+ /* Lexical error: bad comment. */
+ return '?';
+ yyInput++;
+ }
+
+ /* A number? */
+ if (CTYPE(isdigit, (int)c) || c == '-' || c == '+') {
+ if (c == '-' || c == '+') {
+ sign = c == '-' ? -1 : 1;
+ yyInput++;
+ if (!CTYPE(isdigit, (int)*yyInput))
+ /* Skip the plus or minus sign. */
+ continue;
+ }
+ else
+ sign = 0;
+ for (i = 0; (c = *yyInput++) != '\0' && CTYPE(isdigit, (int)c); )
+ i = 10 * i + c - '0';
+ yyInput--;
+ yylval.Number = sign < 0 ? -i : i;
+ return sign ? tSNUMBER : tUNUMBER;
+ }
+
+ /* A word? */
+ if (CTYPE(isalpha, (int)c)) {
+ for (p = buff; (c = *yyInput++) == '.' || CTYPE(isalpha, (int)c); )
+ if (p < &buff[sizeof buff - 1])
+ *p++ = CTYPE(isupper, (int)c) ? tolower(c) : c;
+ *p = '\0';
+ yyInput--;
+ return LookupWord(buff, p - buff);
+ }
+
+ return *yyInput++;
+ }
+}
+
+
+time_t parsedate(char *p, TIMEINFO *now)
+{
+ extern int date_parse();
+ struct tm *tm;
+ TIMEINFO ti;
+ time_t Start;
+
+ yyInput = p;
+ if (now == NULL) {
+ now = &ti;
+ (void)GetTimeInfo(&ti);
+ }
+
+ tm = localtime(&now->time);
+ yyYear = tm->tm_year + 1900;
+ yyMonth = tm->tm_mon + 1;
+ yyDay = tm->tm_mday;
+#ifdef HAVE_TM_GMTOFF
+ yyTimezone = tm->tm_gmtoff/60;
+#else
+ yyTimezone = timezone/60;
+#endif
+ yyDSTmode = DSTmaybe;
+ yyHour = 0;
+ yyMinutes = 0;
+ yySeconds = 0;
+ yyMeridian = MER24;
+ yyRelSeconds = 0;
+ yyRelMonth = 0;
+ yyHaveDate = 0;
+ yyHaveRel = 0;
+ yyHaveTime = 0;
+
+ if (date_parse() || yyHaveTime > 1 || yyHaveDate > 1)
+ return -1;
+
+ if (yyHaveDate || yyHaveTime) {
+ Start = Convert(yyMonth, yyDay, yyYear, yyHour, yyMinutes, yySeconds,
+ yyMeridian, yyDSTmode);
+ if (Start < 0)
+ return -1;
+ }
+ else {
+ Start = now->time;
+ if (!yyHaveRel)
+ Start -= (tm->tm_hour * 60L + tm->tm_min) * 60L + tm->tm_sec;
+ }
+
+ Start += yyRelSeconds;
+ if (yyRelMonth)
+ Start += RelativeMonth(Start, yyRelMonth);
+
+ /* Have to do *something* with a legitimate -1 so it's distinguishable
+ * from the error return value. (Alternately could set errno on error.) */
+ return Start == -1 ? 0 : Start;
+}
diff --git a/ext/standard/php3_filestat.h b/ext/standard/php3_filestat.h
index d7fa84f460..87572a37c4 100644
--- a/ext/standard/php3_filestat.h
+++ b/ext/standard/php3_filestat.h
@@ -44,19 +44,20 @@ PHP_FUNCTION(fileowner);
PHP_FUNCTION(fileperms);
PHP_FUNCTION(filesize);
PHP_FUNCTION(filetype);
-PHP_FUNCTION(iswritable);
-PHP_FUNCTION(isreadable);
-PHP_FUNCTION(isexec);
-PHP_FUNCTION(isfile);
-PHP_FUNCTION(isdir);
-PHP_FUNCTION(islink);
-PHP_FUNCTION(fileexists);
+PHP_FUNCTION(is_writable);
+PHP_FUNCTION(is_readable);
+PHP_FUNCTION(is_executable);
+PHP_FUNCTION(is_file);
+PHP_FUNCTION(is_dir);
+PHP_FUNCTION(is_link);
+PHP_FUNCTION(file_exists);
PHP_FUNCTION(stat);
PHP_FUNCTION(lstat);
PHP_FUNCTION(chown);
PHP_FUNCTION(chgrp);
PHP_FUNCTION(chmod);
PHP_FUNCTION(touch);
+PHP_FUNCTION(clearstatcache);
extern php3_module_entry php3_filestat_module_entry;
#define php3_filestat_module_ptr &php3_filestat_module_entry
diff --git a/ext/standard/php3_string.h b/ext/standard/php3_string.h
index 0619a58d76..26e88c5499 100644
--- a/ext/standard/php3_string.h
+++ b/ext/standard/php3_string.h
@@ -49,7 +49,7 @@ PHP_FUNCTION(str_replace);
PHP_FUNCTION(chop);
PHP_FUNCTION(trim);
PHP_FUNCTION(ltrim);
-void soundex(INTERNAL_FUNCTION_PARAMETERS);
+PHP_FUNCTION(soundex);
PHP_FUNCTION(explode);
PHP_FUNCTION(implode);
@@ -80,9 +80,10 @@ PHP_FUNCTION(nl2br);
PHP_FUNCTION(setlocale);
PHP_FUNCTION(stristr);
PHP_FUNCTION(chunk_split);
-PHP_FUNCTION(parsestr);
+PHP_FUNCTION(parse_str);
PHP_FUNCTION(bin2hex);
PHP_FUNCTION(similar_text);
+PHP_FUNCTION(strip_tags);
extern PHPAPI char *_php3_strtoupper(char *s);
extern PHPAPI char *_php3_strtolower(char *s);
diff --git a/ext/standard/rand.c b/ext/standard/rand.c
index 09d28b6d65..051eab8ce6 100644
--- a/ext/standard/rand.c
+++ b/ext/standard/rand.c
@@ -201,6 +201,8 @@ static inline uint32 randomMT(void)
#define PHP_RAND_MAX RAND_MAX
#endif
+/* {{{ proto void srand(int seed)
+ Seeds random number generator */
PHP_FUNCTION(srand)
{
pval *arg;
@@ -219,7 +221,10 @@ PHP_FUNCTION(srand)
#endif
#endif
}
+/* }}} */
+/* {{{ proto void mt_srand(int seed)
+ Seeds Mersenne Twister random number generator */
PHP_FUNCTION(mt_srand)
{
pval *arg;
@@ -229,7 +234,10 @@ PHP_FUNCTION(mt_srand)
convert_to_long(arg);
seedMT(arg->value.lval);
}
+/* }}} */
+/* {{{ proto int rand([int min, int max])
+ Returns a random number */
PHP_FUNCTION(rand)
{
pval *p_min=NULL, *p_max=NULL;
@@ -262,13 +270,40 @@ PHP_FUNCTION(rand)
return_value->value.lval = rand();
#endif
#endif
-
+ /*
+ * A bit of tricky math here. We want to avoid using a modulus because
+ * that simply tosses the high-order bits and might skew the distribution
+ * of random values over the range. Instead we map the range directly.
+ *
+ * We need to map the range from 0...M evenly to the range a...b
+ * Let n = the random number and n' = the mapped random number
+ *
+ * Then we have: n' = a + n(b-a)/M
+ *
+ * We have a problem here in that only n==M will get mapped to b which
+ # means the chances of getting b is much much less than getting any of
+ # the other values in the range. We can fix this by increasing our range
+ # artifically and using:
+ #
+ # n' = a + n(b-a+1)/M
+ *
+ # Now we only have a problem if n==M which would cause us to produce a
+ # number of b+1 which would be bad. So we bump M up by one to make sure
+ # this will never happen, and the final algorithm looks like this:
+ #
+ # n' = a + n(b-a+1)/(M+1)
+ *
+ * -RL
+ */
if (p_min && p_max) { /* implement range */
return_value->value.lval = p_min->value.lval +
- (int)((double)p_max->value.lval * return_value->value.lval/(PHP_RAND_MAX+(double)p_min->value.lval));
+ (int)((double)(p_max->value.lval - p_min->value.lval + 1) * return_value->value.lval/(PHP_RAND_MAX+1.0));
}
}
+/* }}} */
+/* {{{ proto int mt_rand([int min, int max])
+ Returns a random number from Mersenne Twister */
PHP_FUNCTION(mt_rand)
{
pval *p_min=NULL, *p_max=NULL;
@@ -304,16 +339,23 @@ PHP_FUNCTION(mt_rand)
if (p_min && p_max) { /* implement range */
return_value->value.lval = p_min->value.lval +
- (int)((double)p_max->value.lval * return_value->value.lval/(PHP_RAND_MAX+(double)p_min->value.lval));
+ (int)((double)(p_max->value.lval - p_min->value.lval + 1) * return_value->value.lval/(PHP_RAND_MAX+1.0));
}
}
+/* }}} */
+/* {{{ proto int getrandmax(void)
+ Returns the maximum value a random number can have */
PHP_FUNCTION(getrandmax)
{
return_value->type = IS_LONG;
return_value->value.lval = PHP_RAND_MAX;
}
+/* }}} */
+
+/* {{{ proto int mt_getrandmax(void)
+ Returns the maximum value a random number from Mersenne Twister can have */
PHP_FUNCTION(mt_getrandmax)
{
return_value->type = IS_LONG;
@@ -323,7 +365,7 @@ PHP_FUNCTION(mt_getrandmax)
*/
return_value->value.lval = 2147483647; /* 2^^31 */
}
-
+/* }}} */
/*
* Local variables:
* tab-width: 4
diff --git a/ext/standard/reg.c b/ext/standard/reg.c
index e0f34fd969..b07657d0c1 100644
--- a/ext/standard/reg.c
+++ b/ext/standard/reg.c
@@ -28,13 +28,13 @@
unsigned char third_argument_force_ref[] = { 3, BYREF_NONE, BYREF_NONE, BYREF_FORCE };
function_entry reg_functions[] = {
- {"ereg", php3_ereg, third_argument_force_ref },
- {"ereg_replace", php3_eregreplace, NULL },
- {"eregi", php3_eregi, third_argument_force_ref },
- {"eregi_replace", php3_eregireplace, NULL },
- {"split", php3_split, NULL},
- {"join", php3_implode, NULL},
- {"sql_regcase", php3_sql_regcase, NULL},
+ PHP_FE(ereg, third_argument_force_ref)
+ PHP_FE(ereg_replace, NULL)
+ PHP_FE(eregi, third_argument_force_ref)
+ PHP_FE(eregi_replace, NULL)
+ PHP_FE(split, NULL)
+ PHP_FALIAS(join, implode, NULL)
+ PHP_FE(sql_regcase, NULL)
{NULL, NULL, NULL}
};
@@ -491,7 +491,7 @@ static void _php3_eregreplace(INTERNAL_FUNCTION_PARAMETERS, int icase)
/* {{{ proto string ereg_replace(string pattern, string string [, array registers])
Replace regular expression */
-PHP_FUNCTION(eregreplace)
+PHP_FUNCTION(ereg_replace)
{
_php3_eregreplace(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
}
@@ -499,7 +499,7 @@ PHP_FUNCTION(eregreplace)
/* {{{ proto string eregi_replace(string pattern, string string [, array registers])
Case insensitive replace regular expression */
-PHP_FUNCTION(eregireplace)
+PHP_FUNCTION(eregi_replace)
{
_php3_eregreplace(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
}
diff --git a/ext/standard/reg.h b/ext/standard/reg.h
index 4b7f37466d..c261abf4d2 100644
--- a/ext/standard/reg.h
+++ b/ext/standard/reg.h
@@ -40,8 +40,8 @@ char *_php3_regreplace(const char *pattern, const char *replace, const char *str
PHP_FUNCTION(ereg);
PHP_FUNCTION(eregi);
-PHP_FUNCTION(eregireplace);
-PHP_FUNCTION(eregreplace);
+PHP_FUNCTION(eregi_replace);
+PHP_FUNCTION(ereg_replace);
PHP_FUNCTION(split);
PHPAPI PHP_FUNCTION(sql_regcase);
diff --git a/ext/standard/soundex.c b/ext/standard/soundex.c
index c364418f78..ee67f6a69e 100644
--- a/ext/standard/soundex.c
+++ b/ext/standard/soundex.c
@@ -26,7 +26,7 @@
/* Simple soundex algorithm as described by Knuth in TAOCP, vol 3 */
/* {{{ proto string soundex(string str)
Calculate the soundex key of a string */
-void soundex(INTERNAL_FUNCTION_PARAMETERS)
+PHP_FUNCTION(soundex)
{
char l, u;
char *somestring;
diff --git a/ext/standard/string.c b/ext/standard/string.c
index 1836e2a4d6..1d1717fc36 100644
--- a/ext/standard/string.c
+++ b/ext/standard/string.c
@@ -1712,9 +1712,9 @@ PHP_FUNCTION(setlocale)
}
/* }}} */
-/* {{{ proto void parsestr(string encoded_string)
+/* {{{ proto void parse_str(string encoded_string)
Parses GET/POST/COOKIE data and sets global variables. */
-PHP_FUNCTION(parsestr)
+PHP_FUNCTION(parse_str)
{
pval *arg;
char *res = NULL;
diff --git a/ext/standard/syslog.c b/ext/standard/syslog.c
index 88a8719fd0..0e8f0e9c0d 100644
--- a/ext/standard/syslog.c
+++ b/ext/standard/syslog.c
@@ -257,10 +257,10 @@ PHP_FUNCTION(syslog)
function_entry syslog_functions[] = {
- {"openlog", php3_openlog, NULL},
- {"syslog", php3_syslog, NULL},
- {"closelog", php3_closelog, NULL},
- {"define_syslog_variables", php3_define_syslog_variables, NULL},
+ PHP_FE(openlog, NULL)
+ PHP_FE(syslog, NULL)
+ PHP_FE(closelog, NULL)
+ PHP_FE(define_syslog_variables, NULL)
{NULL, NULL, NULL}
};
diff --git a/ext/wddx/wddx.c b/ext/wddx/wddx.c
index 3fbc211bbb..a14f4e3f06 100644
--- a/ext/wddx/wddx.c
+++ b/ext/wddx/wddx.c
@@ -696,6 +696,7 @@ PHP_FUNCTION(wddx_serialize_vars)
_php_wddx_add_chunk(packet, WDDX_STRUCT_S);
for (i=0; i<argc; i++) {
+ convert_to_string(args[i]);
_php_wddx_add_var(packet, args[i]);
}
@@ -815,6 +816,7 @@ PHP_FUNCTION(wddx_add_vars)
}
for (i=1; i<argc; i++) {
+ convert_to_string(args[i]);
_php_wddx_add_var(packet, args[i]);
}
diff --git a/ext/xml/Makefile.am b/ext/xml/Makefile.am
index 9b6e9cdec4..9f2ca1b1be 100644
--- a/ext/xml/Makefile.am
+++ b/ext/xml/Makefile.am
@@ -3,7 +3,7 @@
phplibdir=$(libdir)/php
SRC=xml.c
-INCLUDES=@INCLUDES@ @XML_INCLUDE@ -I@top_srcdir@ -I@top_srcdir@/libzend
+INCLUDES=@INCLUDES@ -I@top_srcdir@ -I@top_srcdir@/libzend
noinst_LIBRARIES=libphpext_xml.a
phplib_LTLIBRARIES=libphpext_xml.la
libphpext_xml_a_SOURCES=$(SRC)
diff --git a/ext/xml/config.m4 b/ext/xml/config.m4
index 787ee3465d..df323399dc 100644
--- a/ext/xml/config.m4
+++ b/ext/xml/config.m4
@@ -3,7 +3,10 @@
AC_MSG_CHECKING(for XML support)
AC_ARG_WITH(xml,
-[ --with-xml Include XML support],[
+[ --with-xml[=DIR] Include XML support. Will look for expat
+ in DIR if specified. Set DIR to "shared" to
+ build as a dl, or "shared,DIR" to build as a dl
+ and still specify DIR.],[
case $withval in
shared)
shared=yes
@@ -24,19 +27,20 @@ AC_ARG_WITH(xml,
AC_MSG_RESULT([yes (static)])
fi
if test "$withval" = "yes"; then
- test -d /usr/include/xmltok && XML_INCLUDE="-I/usr/include/xmltok"
- test -d /usr/include/xml && XML_INCLUDE="-I/usr/include/xml"
- test -d /usr/local/include/xml && XML_INCLUDE="-I/usr/local/include/xml"
+ test -d /usr/include/xmltok && XML_INCLUDE="/usr/include/xmltok"
+ test -d /usr/include/xml && XML_INCLUDE="/usr/include/xml"
+ test -d /usr/local/include/xml && XML_INCLUDE="/usr/local/include/xml"
AC_CHECK_LIB(expat, main, XML_LIBS="-lexpat", XML_LIBS="-lxmlparse -lxmltok")
else
XML_LIBS="-L$withval/lib -lexpat"
if test -d $withval/include/xml; then
- XML_INCLUDE="-I$withval/include/xml"
+ XML_INCLUDE="$withval/include/xml"
else
- XML_INCLUDE="-I$withval/include"
+ XML_INCLUDE="$withval/include"
fi
fi
AC_DEFINE(HAVE_LIBEXPAT, 1)
+ AC_ADD_INCLUDE($XML_INCLUDE)
PHP_EXTENSION(xml, $shared)
if test "$shared" != "yes"; then
EXTRA_LIBS="$EXTRA_LIBS $XML_LIBS"
@@ -48,4 +52,3 @@ AC_ARG_WITH(xml,
AC_MSG_RESULT(no)
])
AC_SUBST(XML_LIBS)
-AC_SUBST(XML_INCLUDE)