]> granicus.if.org Git - php/commitdiff
Deduplicate NAN/INF portability, move to Zend
authorAndrea Faulds <ajf@ajf.me>
Sun, 20 Mar 2016 01:32:44 +0000 (01:32 +0000)
committerAndrea Faulds <ajf@ajf.me>
Sun, 20 Mar 2016 01:32:44 +0000 (01:32 +0000)
Zend/Zend.m4
Zend/zend_portability.h
ext/intl/common/common_date.cpp
ext/standard/basic_functions.c
ext/standard/config.m4
ext/standard/math.c
ext/standard/var_unserializer.c
ext/standard/var_unserializer.re

index bdeac672b403014b3d6b2adfc93683b0933ee154..3a2da6d1de63238a55578dfc64421fee7720d0f8 100644 (file)
@@ -466,3 +466,140 @@ else
   HAVE_GCC_GLOBAL_REGS=no
 fi
 AC_MSG_RESULT($ZEND_GCC_GLOBAL_REGS)
+
+dnl
+dnl Check if atof() accepts NAN
+dnl
+AC_CACHE_CHECK(whether atof() accepts NAN, ac_cv_atof_accept_nan,[
+AC_TRY_RUN([
+#include <math.h>
+#include <stdlib.h>
+
+#ifdef HAVE_ISNAN
+#define zend_isnan(a) isnan(a)
+#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_isnan(atof("NAN")) ? 0 : 1;
+}
+],[
+  ac_cv_atof_accept_nan=yes
+],[
+  ac_cv_atof_accept_nan=no
+],[
+  ac_cv_atof_accept_nan=no
+])])
+if test "$ac_cv_atof_accept_nan" = "yes"; then
+  AC_DEFINE([HAVE_ATOF_ACCEPTS_NAN], 1, [whether atof() accepts NAN])
+fi
+
+dnl
+dnl Check if atof() accepts INF
+dnl
+AC_CACHE_CHECK(whether atof() accepts INF, ac_cv_atof_accept_inf,[
+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
+
+int main(int argc, char** argv)
+{
+       return zend_isinf(atof("INF")) && zend_isinf(atof("-INF")) ? 0 : 1;
+}
+],[
+  ac_cv_atof_accept_inf=yes
+],[
+  ac_cv_atof_accept_inf=no
+],[
+  ac_cv_atof_accept_inf=no
+])])
+if test "$ac_cv_atof_accept_inf" = "yes"; then
+  AC_DEFINE([HAVE_ATOF_ACCEPTS_INF], 1, [whether atof() accepts INF])
+fi
+
+dnl
+dnl Check if HUGE_VAL == INF
+dnl
+AC_CACHE_CHECK(whether HUGE_VAL == INF, ac_cv_huge_val_inf,[
+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
+
+int main(int argc, char** argv)
+{
+       return zend_isinf(HUGE_VAL) ? 0 : 1;
+}
+],[
+  ac_cv_huge_val_inf=yes
+],[
+  ac_cv_huge_val_inf=no
+],[
+  ac_cv_huge_val_inf=yes
+])])
+dnl This is the most probable fallback so we assume yes in case of cross compile.
+if test "$ac_cv_huge_val_inf" = "yes"; then
+  AC_DEFINE([HAVE_HUGE_VAL_INF], 1, [whether HUGE_VAL == INF])
+fi
+
+dnl
+dnl Check if HUGE_VAL + -HUGEVAL == NAN
+dnl
+AC_CACHE_CHECK(whether HUGE_VAL + -HUGEVAL == NAN, ac_cv_huge_val_nan,[
+AC_TRY_RUN([
+#include <math.h>
+#include <stdlib.h>
+
+#ifdef HAVE_ISNAN
+#define zend_isnan(a) isnan(a)
+#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)
+{
+#if defined(__sparc__) && !(__GNUC__ >= 3)
+       /* prevent bug #27830 */
+       return 1;
+#else
+       return zend_isnan(HUGE_VAL + -HUGE_VAL) ? 0 : 1;
+#endif
+}
+],[
+  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
index 298dfb53fa15567039c1cc726fb5321aa33a8e7b..ff12d93269174929692c2ebc37e5aa354434a290 100644 (file)
@@ -53,6 +53,7 @@
 
 #include <stdio.h>
 #include <assert.h>
+#include <math.h>
 
 #ifdef HAVE_UNIX_H
 # include <unix.h>
@@ -420,6 +421,51 @@ char *alloca();
 #undef MAX
 #define MAX(a, b)  (((a)>(b))?(a):(b))
 #define MIN(a, b)  (((a)<(b))?(a):(b))
+
+/* We always define a function, even if there's a macro or expression we could
+ * alias, so that using it in contexts where we can't make function calls
+ * won't fail to compile on some machines and not others.
+ */
+static zend_always_inline double _zend_get_inf(void) /* {{{ */
+{
+#ifdef INFINITY
+       return INFINITY;
+#elif HAVE_HUGE_VAL_INF
+       return HUGE_VAL;
+#elif defined(__i386__) || defined(_X86_) || defined(ALPHA) || defined(_ALPHA) || defined(__alpha)
+# define _zend_DOUBLE_INFINITY_HIGH       0x7ff00000
+       double val = 0.0;
+       ((uint32_t*)&val)[1] = _zend_DOUBLE_INFINITY_HIGH;
+       ((uint32_t*)&val)[0] = 0;
+       return val;
+#elif HAVE_ATOF_ACCEPTS_INF
+       return atof("INF");
+#else
+       return 1.0/0.0;
+#endif
+} /* }}} */
+#define ZEND_INFINITY (_zend_get_inf())
+
+static zend_always_inline double _zend_get_nan(void) /* {{{ */
+{
+#ifdef NAN
+       return NAN;
+#elif HAVE_HUGE_VAL_NAN
+       return HUGE_VAL + -HUGE_VAL;
+#elif defined(__i386__) || defined(_X86_) || defined(ALPHA) || defined(_ALPHA) || defined(__alpha)
+# define _zend_DOUBLE_QUIET_NAN_HIGH      0xfff80000
+       double val = 0.0;
+       ((uint32_t*)&val)[1] = _zend_DOUBLE_QUIET_NAN_HIGH;
+       ((uint32_t*)&val)[0] = 0;
+       return val;
+#elif HAVE_ATOF_ACCEPTS_NAN
+       return atof("NAN");
+#else
+       return 0.0/0.0;
+#endif
+} /* }}} */
+#define ZEND_NAN (_zend_get_nan())
+
 #define ZEND_STRL(str)         (str), (sizeof(str)-1)
 #define ZEND_STRS(str)         (str), (sizeof(str))
 #define ZEND_NORMALIZE_BOOL(n)                 \
index f1bf75ab0fa67455cf8a17281c26c73d45543b02..2357a03940d4e7f46501136d8b655cef17dd8a7e 100644 (file)
@@ -25,13 +25,7 @@ extern "C" {
 #include <ext/date/php_date.h>
 }
 
-#ifndef INFINITY
-#define INFINITY (DBL_MAX+DBL_MAX)
-#endif
-
-#ifndef NAN
-#define NAN (INFINITY-INFINITY)
-#endif
+#include "zend_portability.h"
 
 /* {{{ timezone_convert_datetimezone
  *      The timezone in DateTime and DateTimeZone is not unified. */
@@ -118,7 +112,7 @@ U_CFUNC int intl_datetime_decompose(zval *z, double *millis, TimeZone **tz,
        }
 
        if (millis) {
-               *millis = NAN;
+               *millis = ZEND_NAN;
        }
        if (tz) {
                *tz = NULL;
@@ -173,13 +167,13 @@ U_CFUNC int intl_datetime_decompose(zval *z, double *millis, TimeZone **tz,
 
 U_CFUNC double intl_zval_to_millis(zval *z, intl_error *err, const char *func)
 {
-       double  rv = NAN;
+       double  rv = ZEND_NAN;
        zend_long       lv;
        int             type;
        char    *message;
 
        if (err && U_FAILURE(err->code)) {
-               return NAN;
+               return ZEND_NAN;
        }
 
        switch (Z_TYPE_P(z)) {
index f8121c1ebfdba01b08cf6cbc63e36ff2616f7ca9..b1ac80fd94bb1972ea28de7050fc72457766a257 100644 (file)
@@ -48,6 +48,8 @@ typedef struct yy_buffer_state *YY_BUFFER_STATE;
 #include "zend_language_scanner.h"
 #include <zend_language_parser.h>
 
+#include "zend_portability.h"
+
 #include <stdarg.h>
 #include <stdlib.h>
 #include <math.h>
@@ -3484,40 +3486,15 @@ static void basic_globals_dtor(php_basic_globals *basic_globals_p) /* {{{ */
 }
 /* }}} */
 
-#define PHP_DOUBLE_INFINITY_HIGH       0x7ff00000
-#define PHP_DOUBLE_QUIET_NAN_HIGH      0xfff80000
-
 PHPAPI double php_get_nan(void) /* {{{ */
 {
-#if HAVE_HUGE_VAL_NAN
-       return HUGE_VAL + -HUGE_VAL;
-#elif defined(__i386__) || defined(_X86_) || defined(ALPHA) || defined(_ALPHA) || defined(__alpha)
-       double val = 0.0;
-       ((uint32_t*)&val)[1] = PHP_DOUBLE_QUIET_NAN_HIGH;
-       ((uint32_t*)&val)[0] = 0;
-       return val;
-#elif HAVE_ATOF_ACCEPTS_NAN
-       return atof("NAN");
-#else
-       return 0.0/0.0;
-#endif
+       return ZEND_NAN;
 }
 /* }}} */
 
 PHPAPI double php_get_inf(void) /* {{{ */
 {
-#if HAVE_HUGE_VAL_INF
-       return HUGE_VAL;
-#elif defined(__i386__) || defined(_X86_) || defined(ALPHA) || defined(_ALPHA) || defined(__alpha)
-       double val = 0.0;
-       ((uint32_t*)&val)[1] = PHP_DOUBLE_INFINITY_HIGH;
-       ((uint32_t*)&val)[0] = 0;
-       return val;
-#elif HAVE_ATOF_ACCEPTS_INF
-       return atof("INF");
-#else
-       return 1.0/0.0;
-#endif
+       return ZEND_INFINITY;
 }
 /* }}} */
 
@@ -3609,8 +3586,8 @@ PHP_MINIT_FUNCTION(basic) /* {{{ */
        REGISTER_MATH_CONSTANT(M_SQRT2);
        REGISTER_MATH_CONSTANT(M_SQRT1_2);
        REGISTER_MATH_CONSTANT(M_SQRT3);
-       REGISTER_DOUBLE_CONSTANT("INF", php_get_inf(), CONST_CS | CONST_PERSISTENT);
-       REGISTER_DOUBLE_CONSTANT("NAN", php_get_nan(), CONST_CS | CONST_PERSISTENT);
+       REGISTER_DOUBLE_CONSTANT("INF", ZEND_INFINITY, CONST_CS | CONST_PERSISTENT);
+       REGISTER_DOUBLE_CONSTANT("NAN", ZEND_NAN, CONST_CS | CONST_PERSISTENT);
 
        REGISTER_LONG_CONSTANT("PHP_ROUND_HALF_UP", PHP_ROUND_HALF_UP, CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("PHP_ROUND_HALF_DOWN", PHP_ROUND_HALF_DOWN, CONST_CS | CONST_PERSISTENT);
index f9afff30e67a21f7a23b658039dae4d62c1bda96..c536773a3cc48d2215e1b1c7b2ca5843e09d3f30 100644 (file)
@@ -411,143 +411,6 @@ dnl
 
 PHP_CHECK_FUNC(res_search, resolv, bind, socket)
 
-dnl
-dnl Check if atof() accepts NAN
-dnl
-AC_CACHE_CHECK(whether atof() accepts NAN, ac_cv_atof_accept_nan,[
-AC_TRY_RUN([
-#include <math.h>
-#include <stdlib.h>
-
-#ifdef HAVE_ISNAN
-#define zend_isnan(a) isnan(a)
-#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_isnan(atof("NAN")) ? 0 : 1;
-}
-],[
-  ac_cv_atof_accept_nan=yes
-],[
-  ac_cv_atof_accept_nan=no
-],[
-  ac_cv_atof_accept_nan=no
-])])
-if test "$ac_cv_atof_accept_nan" = "yes"; then
-  AC_DEFINE([HAVE_ATOF_ACCEPTS_NAN], 1, [whether atof() accepts NAN])
-fi
-
-dnl
-dnl Check if atof() accepts INF
-dnl
-AC_CACHE_CHECK(whether atof() accepts INF, ac_cv_atof_accept_inf,[
-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
-
-int main(int argc, char** argv)
-{
-       return zend_isinf(atof("INF")) && zend_isinf(atof("-INF")) ? 0 : 1;
-}
-],[
-  ac_cv_atof_accept_inf=yes
-],[
-  ac_cv_atof_accept_inf=no
-],[
-  ac_cv_atof_accept_inf=no
-])])
-if test "$ac_cv_atof_accept_inf" = "yes"; then
-  AC_DEFINE([HAVE_ATOF_ACCEPTS_INF], 1, [whether atof() accepts INF])
-fi
-
-dnl
-dnl Check if HUGE_VAL == INF
-dnl
-AC_CACHE_CHECK(whether HUGE_VAL == INF, ac_cv_huge_val_inf,[
-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
-
-int main(int argc, char** argv)
-{
-       return zend_isinf(HUGE_VAL) ? 0 : 1;
-}
-],[
-  ac_cv_huge_val_inf=yes
-],[
-  ac_cv_huge_val_inf=no
-],[
-  ac_cv_huge_val_inf=yes
-])])
-dnl This is the most probable fallback so we assume yes in case of cross compile.
-if test "$ac_cv_huge_val_inf" = "yes"; then
-  AC_DEFINE([HAVE_HUGE_VAL_INF], 1, [whether HUGE_VAL == INF])
-fi
-
-dnl
-dnl Check if HUGE_VAL + -HUGEVAL == NAN
-dnl
-AC_CACHE_CHECK(whether HUGE_VAL + -HUGEVAL == NAN, ac_cv_huge_val_nan,[
-AC_TRY_RUN([
-#include <math.h>
-#include <stdlib.h>
-
-#ifdef HAVE_ISNAN
-#define zend_isnan(a) isnan(a)
-#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)
-{
-#if defined(__sparc__) && !(__GNUC__ >= 3)
-       /* prevent bug #27830 */
-       return 1;
-#else
-       return zend_isnan(HUGE_VAL + -HUGE_VAL) ? 0 : 1;
-#endif
-}
-],[
-  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
-
 dnl
 dnl Check for strptime()
 dnl
index 688ae9f6d1fe8945a2fe1fc9d41cf264dd0dac4d..5caac2e542ec17f1f1dcd5a1bcb8d08e142bdf0a 100644 (file)
@@ -25,6 +25,7 @@
 #include "php_math.h"
 #include "zend_multiply.h"
 #include "zend_exceptions.h"
+#include "zend_portability.h"
 
 #include <math.h>
 #include <float.h>
@@ -239,7 +240,7 @@ static double php_acosh(double x)
        if (x >= 1) {
                return log(x + sqrt(x * x - 1));
        } else {
-               return (DBL_MAX+DBL_MAX)-(DBL_MAX+DBL_MAX);
+               return ZEND_NAN;
        }
 # else
        return(log(x + sqrt(x * x - 1)));
@@ -845,7 +846,7 @@ PHP_FUNCTION(log)
        }
 
        if (base == 1.0) {
-               RETURN_DOUBLE(php_get_nan());
+               RETURN_DOUBLE(ZEND_NAN);
        }
 
        if (base <= 0.0) {
@@ -1119,7 +1120,7 @@ PHPAPI zend_string * _php_math_zvaltobase(zval *arg, int base)
                char buf[(sizeof(double) << 3) + 1];
 
                /* Don't try to convert +/- infinity */
-               if (fvalue == HUGE_VAL || fvalue == -HUGE_VAL) {
+               if (fvalue == ZEND_INFINITY || fvalue == -ZEND_INFINITY) {
                        php_error_docref(NULL, E_WARNING, "Number too large");
                        return ZSTR_EMPTY_ALLOC();
                }
index 443a42cca31688376e62a5ce26e5dd2b48452fea..3b76af90b7635c4693d62f3e6d2817f2825b4252 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.13.5 */
+/* Generated by re2c 0.15.3 */
 #line 1 "ext/standard/var_unserializer.re"
 /*
   +----------------------------------------------------------------------+
@@ -23,6 +23,7 @@
 #include "php.h"
 #include "ext/standard/php_var.h"
 #include "php_incomplete_class.h"
+#include "zend_portability.h"
 
 /* {{{ reference-handling for unserializer: var_* */
 #define VAR_ENTRIES_MAX 1024
@@ -238,7 +239,7 @@ static inline int unserialize_allowed_class(zend_string *class_name, HashTable *
 #define YYMARKER marker
 
 
-#line 246 "ext/standard/var_unserializer.re"
+#line 247 "ext/standard/var_unserializer.re"
 
 
 
@@ -514,7 +515,7 @@ PHPAPI int php_var_unserialize_ex(UNSERIALIZE_PARAMETER)
        start = cursor;
 
 
-#line 518 "ext/standard/var_unserializer.c"
+#line 519 "ext/standard/var_unserializer.c"
 {
        YYCTYPE yych;
        static const unsigned char yybm[] = {
@@ -551,7 +552,6 @@ PHPAPI int php_var_unserialize_ex(UNSERIALIZE_PARAMETER)
                  0,   0,   0,   0,   0,   0,   0,   0, 
                  0,   0,   0,   0,   0,   0,   0,   0, 
        };
-
        if ((YYLIMIT - YYCURSOR) < 7) YYFILL(7);
        yych = *YYCURSOR;
        switch (yych) {
@@ -574,7 +574,7 @@ yy2:
        yych = *(YYMARKER = ++YYCURSOR);
        if (yych == ':') goto yy95;
 yy3:
-#line 884 "ext/standard/var_unserializer.re"
+#line 885 "ext/standard/var_unserializer.re"
        { return 0; }
 #line 580 "ext/standard/var_unserializer.c"
 yy4:
@@ -619,7 +619,7 @@ yy13:
        goto yy3;
 yy14:
        ++YYCURSOR;
-#line 878 "ext/standard/var_unserializer.re"
+#line 879 "ext/standard/var_unserializer.re"
        {
        /* this is the case where we have less data than planned */
        php_error_docref(NULL, E_NOTICE, "Unexpected end of serialized data");
@@ -651,11 +651,12 @@ yy20:
        if (yybm[0+yych] & 128) {
                goto yy20;
        }
-       if (yych != ':') goto yy18;
+       if (yych <= '/') goto yy18;
+       if (yych >= ';') goto yy18;
        yych = *++YYCURSOR;
        if (yych != '"') goto yy18;
        ++YYCURSOR;
-#line 733 "ext/standard/var_unserializer.re"
+#line 734 "ext/standard/var_unserializer.re"
        {
        size_t len, len2, len3, maxlen;
        zend_long elements;
@@ -800,7 +801,7 @@ yy20:
 
        return object_common2(UNSERIALIZE_PASSTHRU, elements);
 }
-#line 804 "ext/standard/var_unserializer.c"
+#line 805 "ext/standard/var_unserializer.c"
 yy25:
        yych = *++YYCURSOR;
        if (yych <= ',') {
@@ -825,14 +826,14 @@ yy27:
        yych = *++YYCURSOR;
        if (yych != '"') goto yy18;
        ++YYCURSOR;
-#line 726 "ext/standard/var_unserializer.re"
+#line 727 "ext/standard/var_unserializer.re"
        {
     if (!var_hash) return 0;
 
        return object_common2(UNSERIALIZE_PASSTHRU,
                        object_common1(UNSERIALIZE_PASSTHRU, ZEND_STANDARD_CLASS_DEF_PTR));
 }
-#line 836 "ext/standard/var_unserializer.c"
+#line 837 "ext/standard/var_unserializer.c"
 yy32:
        yych = *++YYCURSOR;
        if (yych == '+') goto yy33;
@@ -853,7 +854,7 @@ yy34:
        yych = *++YYCURSOR;
        if (yych != '{') goto yy18;
        ++YYCURSOR;
-#line 702 "ext/standard/var_unserializer.re"
+#line 703 "ext/standard/var_unserializer.re"
        {
        zend_long elements = parse_iv(start + 2);
        /* use iv() not uiv() in order to check data range */
@@ -877,7 +878,7 @@ yy34:
 
        return finish_nested_data(UNSERIALIZE_PASSTHRU);
 }
-#line 881 "ext/standard/var_unserializer.c"
+#line 882 "ext/standard/var_unserializer.c"
 yy39:
        yych = *++YYCURSOR;
        if (yych == '+') goto yy40;
@@ -898,7 +899,7 @@ yy41:
        yych = *++YYCURSOR;
        if (yych != '"') goto yy18;
        ++YYCURSOR;
-#line 668 "ext/standard/var_unserializer.re"
+#line 669 "ext/standard/var_unserializer.re"
        {
        size_t len, maxlen;
        zend_string *str;
@@ -932,7 +933,7 @@ yy41:
        ZVAL_STR(rval, str);
        return 1;
 }
-#line 936 "ext/standard/var_unserializer.c"
+#line 937 "ext/standard/var_unserializer.c"
 yy46:
        yych = *++YYCURSOR;
        if (yych == '+') goto yy47;
@@ -953,7 +954,7 @@ yy48:
        yych = *++YYCURSOR;
        if (yych != '"') goto yy18;
        ++YYCURSOR;
-#line 636 "ext/standard/var_unserializer.re"
+#line 637 "ext/standard/var_unserializer.re"
        {
        size_t len, maxlen;
        char *str;
@@ -985,7 +986,7 @@ yy48:
        ZVAL_STRINGL(rval, str, len);
        return 1;
 }
-#line 989 "ext/standard/var_unserializer.c"
+#line 990 "ext/standard/var_unserializer.c"
 yy53:
        yych = *++YYCURSOR;
        if (yych <= '/') {
@@ -1073,7 +1074,7 @@ yy61:
        }
 yy63:
        ++YYCURSOR;
-#line 627 "ext/standard/var_unserializer.re"
+#line 628 "ext/standard/var_unserializer.re"
        {
 #if SIZEOF_ZEND_LONG == 4
 use_double:
@@ -1082,7 +1083,7 @@ use_double:
        ZVAL_DOUBLE(rval, zend_strtod((const char *)start + 2, NULL));
        return 1;
 }
-#line 1086 "ext/standard/var_unserializer.c"
+#line 1087 "ext/standard/var_unserializer.c"
 yy65:
        yych = *++YYCURSOR;
        if (yych <= ',') {
@@ -1141,23 +1142,23 @@ yy73:
        yych = *++YYCURSOR;
        if (yych != ';') goto yy18;
        ++YYCURSOR;
-#line 611 "ext/standard/var_unserializer.re"
+#line 612 "ext/standard/var_unserializer.re"
        {
        *p = YYCURSOR;
 
        if (!strncmp((char*)start + 2, "NAN", 3)) {
-               ZVAL_DOUBLE(rval, php_get_nan());
+               ZVAL_DOUBLE(rval, ZEND_NAN);
        } else if (!strncmp((char*)start + 2, "INF", 3)) {
-               ZVAL_DOUBLE(rval, php_get_inf());
+               ZVAL_DOUBLE(rval, ZEND_INFINITY);
        } else if (!strncmp((char*)start + 2, "-INF", 4)) {
-               ZVAL_DOUBLE(rval, -php_get_inf());
+               ZVAL_DOUBLE(rval, -ZEND_INFINITY);
        } else {
                ZVAL_NULL(rval);
        }
 
        return 1;
 }
-#line 1161 "ext/standard/var_unserializer.c"
+#line 1162 "ext/standard/var_unserializer.c"
 yy76:
        yych = *++YYCURSOR;
        if (yych == 'N') goto yy73;
@@ -1184,7 +1185,7 @@ yy79:
        if (yych <= '9') goto yy79;
        if (yych != ';') goto yy18;
        ++YYCURSOR;
-#line 585 "ext/standard/var_unserializer.re"
+#line 586 "ext/standard/var_unserializer.re"
        {
 #if SIZEOF_ZEND_LONG == 4
        int digits = YYCURSOR - start - 3;
@@ -1210,7 +1211,7 @@ yy79:
        ZVAL_LONG(rval, parse_iv(start + 2));
        return 1;
 }
-#line 1214 "ext/standard/var_unserializer.c"
+#line 1215 "ext/standard/var_unserializer.c"
 yy83:
        yych = *++YYCURSOR;
        if (yych <= '/') goto yy18;
@@ -1218,22 +1219,22 @@ yy83:
        yych = *++YYCURSOR;
        if (yych != ';') goto yy18;
        ++YYCURSOR;
-#line 579 "ext/standard/var_unserializer.re"
+#line 580 "ext/standard/var_unserializer.re"
        {
        *p = YYCURSOR;
        ZVAL_BOOL(rval, parse_iv(start + 2));
        return 1;
 }
-#line 1228 "ext/standard/var_unserializer.c"
+#line 1229 "ext/standard/var_unserializer.c"
 yy87:
        ++YYCURSOR;
-#line 573 "ext/standard/var_unserializer.re"
+#line 574 "ext/standard/var_unserializer.re"
        {
        *p = YYCURSOR;
        ZVAL_NULL(rval);
        return 1;
 }
-#line 1237 "ext/standard/var_unserializer.c"
+#line 1238 "ext/standard/var_unserializer.c"
 yy89:
        yych = *++YYCURSOR;
        if (yych <= ',') {
@@ -1256,7 +1257,7 @@ yy91:
        if (yych <= '9') goto yy91;
        if (yych != ';') goto yy18;
        ++YYCURSOR;
-#line 548 "ext/standard/var_unserializer.re"
+#line 549 "ext/standard/var_unserializer.re"
        {
        zend_long id;
 
@@ -1281,7 +1282,7 @@ yy91:
 
        return 1;
 }
-#line 1285 "ext/standard/var_unserializer.c"
+#line 1286 "ext/standard/var_unserializer.c"
 yy95:
        yych = *++YYCURSOR;
        if (yych <= ',') {
@@ -1304,7 +1305,7 @@ yy97:
        if (yych <= '9') goto yy97;
        if (yych != ';') goto yy18;
        ++YYCURSOR;
-#line 522 "ext/standard/var_unserializer.re"
+#line 523 "ext/standard/var_unserializer.re"
        {
        zend_long id;
 
@@ -1330,9 +1331,9 @@ yy97:
 
        return 1;
 }
-#line 1334 "ext/standard/var_unserializer.c"
+#line 1335 "ext/standard/var_unserializer.c"
 }
-#line 886 "ext/standard/var_unserializer.re"
+#line 887 "ext/standard/var_unserializer.re"
 
 
        return 0;
index abd1f28faedf4b6071f31e30a32bb5233d1e1ab4..4920e2bc8d3b703863a7f2ce53e13de27428923a 100644 (file)
@@ -21,6 +21,7 @@
 #include "php.h"
 #include "ext/standard/php_var.h"
 #include "php_incomplete_class.h"
+#include "zend_portability.h"
 
 /* {{{ reference-handling for unserializer: var_* */
 #define VAR_ENTRIES_MAX 1024
@@ -612,11 +613,11 @@ PHPAPI int php_var_unserialize_ex(UNSERIALIZE_PARAMETER)
        *p = YYCURSOR;
 
        if (!strncmp((char*)start + 2, "NAN", 3)) {
-               ZVAL_DOUBLE(rval, php_get_nan());
+               ZVAL_DOUBLE(rval, ZEND_NAN);
        } else if (!strncmp((char*)start + 2, "INF", 3)) {
-               ZVAL_DOUBLE(rval, php_get_inf());
+               ZVAL_DOUBLE(rval, ZEND_INFINITY);
        } else if (!strncmp((char*)start + 2, "-INF", 4)) {
-               ZVAL_DOUBLE(rval, -php_get_inf());
+               ZVAL_DOUBLE(rval, -ZEND_INFINITY);
        } else {
                ZVAL_NULL(rval);
        }