From 8bb1361f23a07874d2525a54bd307f9022a6d813 Mon Sep 17 00:00:00 2001 From: Antony Dovgal Date: Thu, 24 Aug 2006 11:05:38 +0000 Subject: [PATCH] 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 --- ext/standard/config.m4 | 20 ++++++++++++++++++++ ext/standard/datetime.c | 8 ++++---- 2 files changed, 24 insertions(+), 4 deletions(-) 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) -- 2.50.1