cvs: php-src /ext/standard basic_functions.c config.m4

From: Date: Mon, 29 Mar 2004 18:51:47 +0000
Subject: cvs: php-src /ext/standard basic_functions.c config.m4
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-26853@lists.php.net to get a copy of this message
helly Mon Mar 29 13:51:47 2004 EDT Modified files: /php-src/ext/standard config.m4 basic_functions.c Log: Found a NAN/INF solution that should be portable everywhere(?) (Ard,Marcus) http://cvs.php.net/diff.php/php-src/ext/standard/config.m4?r1=1.69&r2=1.70&ty=u Index: php-src/ext/standard/config.m4 diff -u php-src/ext/standard/config.m4:1.69 php-src/ext/standard/config.m4:1.70 --- php-src/ext/standard/config.m4:1.69 Fri Mar 26 20:41:32 2004 +++ php-src/ext/standard/config.m4 Mon Mar 29 13:51:47 2004 @@ -1,4 +1,4 @@ -dnl $Id: config.m4,v 1.69 2004/03/27 01:41:32 helly Exp $ -*- sh -*- +dnl $Id: config.m4,v 1.70 2004/03/29 18:51:47 helly Exp $ -*- sh -*- divert(3)dnl @@ -391,6 +391,49 @@ AC_DEFINE([HAVE_ATOF_ACCEPTS_INF], 1, [whether atof() accepts INF]) fi +AC_CACHE_CHECK(whether HUGE_VAL + -HUGEVAL = NAN, ac_cv_huge_val_nan,[ + AC_TRY_RUN([ +#include <math.h> +#include <stdlib.h> + +#ifdef HAVE_ISINF +#define zend_isinf(a) isinf(a) +#elif defined(INFINITY) +/* Might not work, but is required by ISO C99 */ +#define zend_isinf(a) (((a)==INFINITY)?1:0) +#elif defined(HAVE_FPCLASS) +#define zend_isinf(a) ((fpclass(a) == FP_PINF) || (fpclass(a) == FP_NINF)) +#else +#define zend_isinf(a) 0 +#endif + +#ifdef HAVE_ISNAN +#define zend_isnan(a) isnan(a) +#elif defined(NAN) +#define zend_isnan(a) (((a)==NAN)?1:0) +#elif defined(HAVE_FPCLASS) +#define zend_isnan(a) ((fpclass(a) == FP_SNAN) || (fpclass(a) == FP_QNAN)) +#else +#define zend_isnan(a) 0 +#endif + +int main(int argc, char** argv) +{ + return zend_isinf(HUGE_VAL) && zend_isnan(HUGE_VAL + -HUGE_VAL) ? 0 : 1; +} + ],[ + ac_cv_huge_val_nan=yes + ],[ + ac_cv_huge_val_nan=no + ],[ + ac_cv_huge_val_nan=yes + ]) +]) +dnl This is the most probable fallback so we assume yes in case of cross compile. +if test "$ac_cv_huge_val_nan" = "yes"; then + AC_DEFINE([HAVE_HUGE_VAL_NAN], 1, [whether HUGE_VAL + -HUGEVAL = NAN]) +fi + PHP_CHECK_I18N_FUNCS PHP_NEW_EXTENSION(standard, array.c base64.c basic_functions.c browscap.c crc32.c crypt.c \ http://cvs.php.net/diff.php/php-src/ext/standard/basic_functions.c?r1=1.660&r2=1.661&ty=u Index: php-src/ext/standard/basic_functions.c diff -u php-src/ext/standard/basic_functions.c:1.660 php-src/ext/standard/basic_functions.c:1.661 --- php-src/ext/standard/basic_functions.c:1.660 Sun Mar 28 16:46:43 2004 +++ php-src/ext/standard/basic_functions.c Mon Mar 29 13:51:47 2004 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: basic_functions.c,v 1.660 2004/03/28 21:46:43 helly Exp $ */ +/* $Id: basic_functions.c,v 1.661 2004/03/29 18:51:47 helly Exp $ */ #include "php.h" #include "php_streams.h" @@ -952,12 +952,14 @@ PHPAPI double php_get_nan() { -#if defined(__i386__) || defined(_X86_) || defined(ALPHA) || defined(_ALPHA) || defined(__alpha) +#if HAVE_HUGE_VAL_NAN + return HUGE_VAL + -HUGE_VAL; +#elif defined(__i386__) || defined(_X86_) || defined(ALPHA) || defined(_ALPHA) || defined(__alpha) double val; ((php_uint32*)&val)[1] = PHP_DOUBLE_QUIET_NAN_HIGH; ((php_uint32*)&val)[0] = 0; return val; -#elif defined(HAVE_ATOF_ACCEPTS_NAN) +#elif HAVE_ATOF_ACCEPTS_NAN return atof("NAN"); #else return 0.0/0.0; @@ -966,12 +968,14 @@ PHPAPI double php_get_inf() { -#if defined(__i386__) || defined(_X86_) || defined(ALPHA) || defined(_ALPHA) || defined(__alpha) +#if HAVE_HUGE_VAL_NAN + return HUGE_VAL; +#elif defined(__i386__) || defined(_X86_) || defined(ALPHA) || defined(_ALPHA) || defined(__alpha) double val; ((php_uint32*)&val)[1] = PHP_DOUBLE_INFINITY_HIGH; ((php_uint32*)&val)[0] = 0; return val; -#elif defined(HAVE_ATOF_ACCEPTS_INF) +#elif HAVE_ATOF_ACCEPTS_INF return atof("INF"); #else return 1.0/0.0;

« previous php.cvs (#26853) next »