From: Antony Dovgal Date: Thu, 24 Aug 2006 11:05:38 +0000 (+0000) Subject: this fixes segfault in strptime() on 64bit Linuxes, caused by the missing declaration X-Git-Tag: RELEASE_1_0_0RC1~1895 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8bb1361f23a07874d2525a54bd307f9022a6d813;p=php this fixes segfault in strptime() on 64bit Linuxes, caused by the missing declaration unfortunately defining _XOPEN_SOURCE breaks the build (some odd dependencies in glibc headers) and this seems to be the best solution --- diff --git a/ext/standard/config.m4 b/ext/standard/config.m4 index cc1f95f313..d9961131c5 100644 --- a/ext/standard/config.m4 +++ b/ext/standard/config.m4 @@ -477,6 +477,26 @@ if test "$ac_cv_huge_val_nan" = "yes"; then AC_DEFINE([HAVE_HUGE_VAL_NAN], 1, [whether HUGE_VAL + -HUGEVAL == NAN]) fi +AC_CACHE_CHECK(whether strptime() declaration fails, ac_cv_strptime_decl_fails,[ + AC_TRY_COMPILE([ +#include + ],[ +#ifndef HAVE_STRPTIME +#error no strptime() on this platform +#else +/* use invalid strptime() declaration to see if it fails to compile */ +int strptime(const char *s, const char *format, struct tm *tm); +#endif + ],[ + ac_cv_strptime_decl_fails=no + ],[ + ac_cv_strptime_decl_fails=yes + ]) +]) +if test "$ac_cv_strptime_decl_fails" = "yes"; then + AC_DEFINE([HAVE_STRPTIME_DECL_FAILS], 1, [whether strptime() declaration fails]) +fi + PHP_CHECK_I18N_FUNCS PHP_NEW_EXTENSION(standard, array.c base64.c basic_functions.c browscap.c crc32.c crypt.c \ diff --git a/ext/standard/datetime.c b/ext/standard/datetime.c index 7e2a5b4434..ddb7249b35 100644 --- a/ext/standard/datetime.c +++ b/ext/standard/datetime.c @@ -20,10 +20,6 @@ /* $Id$ */ -#if HAVE_STRPTIME -#define _XOPEN_SOURCE -#endif - #include "php.h" #include "zend_operators.h" #include "datetime.h" @@ -85,6 +81,10 @@ PHPAPI char *php_std_date(time_t t TSRMLS_DC) #if HAVE_STRPTIME +#ifndef HAVE_STRPTIME_DECL_FAILS +char *strptime(const char *s, const char *format, struct tm *tm); +#endif + /* {{{ proto string strptime(string timestamp, string format) Parse a time/date generated with strftime() */ PHP_FUNCTION(strptime)