Browse Source

Issue#114: check for the presence of isnan and isinf, and provide compat macros on MSCV where _isnan and _finite exist instead.

tags/json-c-0.12-20140410
Eric Haszlakiewicz 11 years ago
parent
commit
e6f1322b5e
4 changed files with 42 additions and 1 deletions
  1. +16
    -0
      config.h.in
  2. +5
    -1
      configure.ac
  3. +1
    -0
      json_object.c
  4. +20
    -0
      math_compat.h

+ 16
- 0
config.h.in View File

@@ -3,6 +3,22 @@
/* Define if .gnu.warning accepts long strings. */ /* Define if .gnu.warning accepts long strings. */
#undef HAS_GNU_WARNING_LONG #undef HAS_GNU_WARNING_LONG


/* Define to 1 if you have the declaration of `isinf', and to 0 if you don't.
*/
#undef HAVE_DECL_ISINF

/* Define to 1 if you have the declaration of `isnan', and to 0 if you don't.
*/
#undef HAVE_DECL_ISNAN

/* Define to 1 if you have the declaration of `_finite', and to 0 if you
don't. */
#undef HAVE_DECL__FINITE

/* Define to 1 if you have the declaration of `_isnan', and to 0 if you don't.
*/
#undef HAVE_DECL__ISNAN

/* Define to 1 if you have the <dlfcn.h> header file. */ /* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H #undef HAVE_DLFCN_H




+ 5
- 1
configure.ac View File

@@ -3,7 +3,7 @@ AC_PREREQ(2.52)
# Process this file with autoconf to produce a configure script. # Process this file with autoconf to produce a configure script.
AC_INIT([json-c], 0.11.99, [json-c@googlegroups.com]) AC_INIT([json-c], 0.11.99, [json-c@googlegroups.com])


AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
AM_INIT_AUTOMAKE


AC_PROG_MAKE_SET AC_PROG_MAKE_SET


@@ -29,6 +29,10 @@ AC_FUNC_MEMCMP
AC_FUNC_MALLOC AC_FUNC_MALLOC
AC_FUNC_REALLOC AC_FUNC_REALLOC
AC_CHECK_FUNCS(strcasecmp strdup strerror snprintf vsnprintf vasprintf open vsyslog strncasecmp setlocale) AC_CHECK_FUNCS(strcasecmp strdup strerror snprintf vsnprintf vasprintf open vsyslog strncasecmp setlocale)
AC_CHECK_DECLS([isnan], [], [], [[#include <math.h>]])
AC_CHECK_DECLS([isinf], [], [], [[#include <math.h>]])
AC_CHECK_DECLS([_isnan], [], [], [[#include <float.h>]])
AC_CHECK_DECLS([_finite], [], [], [[#include <float.h>]])


#check if .section.gnu.warning accepts long strings (for __warn_references) #check if .section.gnu.warning accepts long strings (for __warn_references)
AC_LANG_PUSH([C]) AC_LANG_PUSH([C])


+ 1
- 0
json_object.c View File

@@ -27,6 +27,7 @@
#include "json_object.h" #include "json_object.h"
#include "json_object_private.h" #include "json_object_private.h"
#include "json_util.h" #include "json_util.h"
#include "math_compat.h"


#if !defined(HAVE_STRDUP) && defined(_MSC_VER) #if !defined(HAVE_STRDUP) && defined(_MSC_VER)
/* MSC has the version as _strdup */ /* MSC has the version as _strdup */


+ 20
- 0
math_compat.h View File

@@ -0,0 +1,20 @@
#ifndef __math_compat_h
#define __math_compat_h

/* Define isnan and isinf on Windows/MSVC */

#ifndef HAVE_DECL_ISNAN
# ifdef HAVE_DECL__ISNAN
#include <float.h>
#define isnan(x) _isnan(x)
# endif
#endif

#ifndef HAVE_DECL_ISINF
# ifdef HAVE_DECL__FINITE
#include <float.h>
#define isinf(x) (!_finite(x))
# endif
#endif

#endif

Loading…
Cancel
Save