From e0651e7375028d7f2edff087fae5ad4298f98c12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Walld=C3=A9n?= <jonasw@roxen.com> Date: Thu, 23 Jul 2015 21:58:49 +0200 Subject: [PATCH] Switch from finite() to isfinite() since the former is flagged as deprecated on OS X. --- src/acconfig.h | 3 +++ src/configure.in | 10 ++++++++++ src/encode.c | 5 ++++- src/sprintf.c | 5 ++++- 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/acconfig.h b/src/acconfig.h index dba3f89b12..e69b20ec4e 100644 --- a/src/acconfig.h +++ b/src/acconfig.h @@ -247,6 +247,9 @@ /* Define if you have _isnan */ #undef HAVE__ISNAN +/* Define if you have isfinite */ +#undef HAVE_ISFINITE + /* Define if you have fork */ #undef HAVE_FORK diff --git a/src/configure.in b/src/configure.in index 125fddf557..023342a080 100644 --- a/src/configure.in +++ b/src/configure.in @@ -4719,6 +4719,16 @@ MY_CHECK_FUNCTION(_isnan, exit(_isnan(0.0)); ]) ############################################################################# +# isfinite() is a macro on at least OS X and Linux which doesn't play well +# with AC_CHECK_FUNCS(). +MY_CHECK_FUNCTION(isfinite, +[ +#include <math.h> +], [ + int t = isfinite(0.0); + exit(0); +]) +############################################################################# # FreeBSD 3.0 has broken F_SETFD when running with threads. diff --git a/src/encode.c b/src/encode.c index 8215406e89..6d99fa9dc9 100644 --- a/src/encode.c +++ b/src/encode.c @@ -675,7 +675,10 @@ static void encode_value2(struct svalue *val, struct encode_data *data, int forc pike_ftype=Pike_FP_PZERO; else #endif -#ifdef HAVE_FINITE +#ifdef HAVE_ISFINITE + if(!isfinite(d)) + pike_ftype=Pike_FP_PINF; +#elif HAVE_FINITE if(!finite(d)) pike_ftype=Pike_FP_PINF; #endif diff --git a/src/sprintf.c b/src/sprintf.c index 2b06c31621..5a75db7259 100644 --- a/src/sprintf.c +++ b/src/sprintf.c @@ -476,7 +476,10 @@ static void low_write_IEEE_float(char *b, double d, int sz) e = 0; else #endif -#ifdef HAVE_FINITE +#ifdef HAVE_ISFINITE + if(!isfinite(d)) + e = maxexp; +#elif HAVE_FINITE if(!finite(d)) e = maxexp; #endif -- GitLab