From 545464322b2c8226ab6ff52ff4767f7d40518064 Mon Sep 17 00:00:00 2001 From: Eric Haszlakiewicz Date: Thu, 9 Apr 2020 20:58:28 +0000 Subject: [PATCH] Issue #568: fix the strtoll and strtoull handing so config.h ends up creating defines for those only when needed, which should exclude mingw environments. --- CMakeLists.txt | 45 +++++++++++++++++++++------------------------ cmake/config.h.in | 11 +++++++++-- json_util.c | 5 ----- 3 files changed, 30 insertions(+), 31 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 898974d..6b70fa6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -166,30 +166,27 @@ if (HAVE_SYSLOG_H) check_symbol_exists(vsyslog "syslog.h" HAVE_VSYSLOG) endif() -if (MSVC) - check_symbol_exists(strtoll "stdlib.h" HAVE_STRTOLL) - check_symbol_exists(strtoull "stdlib.h" HAVE_STRTOULL) - - set(json_c_strtoll "strtoll") - if (NOT HAVE_STRTOLL) - # Use _strtoi64 if strtoll is not available. - check_symbol_exists(_strtoi64 "stdlib.h" __have_strtoi64) - if (__have_strtoi64) - set(HAVE_STRTOLL 1) - set(json_c_strtoll "_strtoi64") - # could do the same for strtoull, if needed - endif() - endif() - - set(json_c_strtoull "strtoull") - if (NOT HAVE_STRTOULL) - # Use _strtoui64 if strtoull is not available. - check_symbol_exists(_strtoui64 "stdlib.h" __have_strtoui64) - if (__have_strtoui64) - set(HAVE_STRTOULL 1) - set(json_c_strtoull "_strtoui64") - endif() - endif() +check_symbol_exists(strtoll "stdlib.h" HAVE_STRTOLL) +check_symbol_exists(strtoull "stdlib.h" HAVE_STRTOULL) + +set(json_c_strtoll "strtoll") +if (NOT HAVE_STRTOLL) +# Use _strtoi64 if strtoll is not available. +check_symbol_exists(_strtoi64 "stdlib.h" __have_strtoi64) +if (__have_strtoi64) + #set(HAVE_STRTOLL 1) + set(json_c_strtoll "_strtoi64") +endif() +endif() + +set(json_c_strtoull "strtoull") +if (NOT HAVE_STRTOULL) +# Use _strtoui64 if strtoull is not available. +check_symbol_exists(_strtoui64 "stdlib.h" __have_strtoui64) +if (__have_strtoui64) + #set(HAVE_STRTOULL 1) + set(json_c_strtoull "_strtoui64") +endif() endif() diff --git a/cmake/config.h.in b/cmake/config.h.in index 3539d6f..5e64e58 100644 --- a/cmake/config.h.in +++ b/cmake/config.h.in @@ -136,9 +136,16 @@ #cmakedefine HAVE_VSYSLOG @HAVE_VSYSLOG@ #cmakedefine HAVE_STRTOLL -#cmakedefine strtoll @json_c_strtoll@ +#if !defined(HAVE_STRTOLL) +#define strtoll @json_c_strtoll@ +/* #cmakedefine json_c_strtoll @json_c_strtoll@*/ +#endif + #cmakedefine HAVE_STRTOULL -#cmakedefine strtoull @json_c_strtoull@ +#if !defined(HAVE_STRTOULL) +#define strtoull @json_c_strtoull@ +/* #cmakedefine json_c_strtoull @json_c_strtoull@ */ +#endif /* Have __thread */ #cmakedefine HAVE___THREAD diff --git a/json_util.c b/json_util.c index abbabd3..24dd768 100644 --- a/json_util.c +++ b/json_util.c @@ -39,11 +39,6 @@ #endif /* HAVE_UNISTD_H */ #ifdef WIN32 -#if MSC_VER < 1800 -/* strtoll/strtoull is available only since Visual Studio 2013 */ -#define strtoll _strtoi64 -#define strtoull _strtoui64 -#endif #define WIN32_LEAN_AND_MEAN #include #include -- 2.49.0