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.

This commit is contained in:
Eric Haszlakiewicz
2020-04-09 20:58:28 +00:00
parent b64bdfe381
commit 545464322b
3 changed files with 28 additions and 29 deletions

View File

@@ -166,30 +166,27 @@ if (HAVE_SYSLOG_H)
check_symbol_exists(vsyslog "syslog.h" HAVE_VSYSLOG) check_symbol_exists(vsyslog "syslog.h" HAVE_VSYSLOG)
endif() endif()
if (MSVC) check_symbol_exists(strtoll "stdlib.h" HAVE_STRTOLL)
check_symbol_exists(strtoll "stdlib.h" HAVE_STRTOLL) check_symbol_exists(strtoull "stdlib.h" HAVE_STRTOULL)
check_symbol_exists(strtoull "stdlib.h" HAVE_STRTOULL)
set(json_c_strtoll "strtoll") set(json_c_strtoll "strtoll")
if (NOT HAVE_STRTOLL) if (NOT HAVE_STRTOLL)
# Use _strtoi64 if strtoll is not available. # Use _strtoi64 if strtoll is not available.
check_symbol_exists(_strtoi64 "stdlib.h" __have_strtoi64) check_symbol_exists(_strtoi64 "stdlib.h" __have_strtoi64)
if (__have_strtoi64) if (__have_strtoi64)
set(HAVE_STRTOLL 1) #set(HAVE_STRTOLL 1)
set(json_c_strtoll "_strtoi64") set(json_c_strtoll "_strtoi64")
# could do the same for strtoull, if needed endif()
endif() endif()
endif()
set(json_c_strtoull "strtoull") set(json_c_strtoull "strtoull")
if (NOT HAVE_STRTOULL) if (NOT HAVE_STRTOULL)
# Use _strtoui64 if strtoull is not available. # Use _strtoui64 if strtoull is not available.
check_symbol_exists(_strtoui64 "stdlib.h" __have_strtoui64) check_symbol_exists(_strtoui64 "stdlib.h" __have_strtoui64)
if (__have_strtoui64) if (__have_strtoui64)
set(HAVE_STRTOULL 1) #set(HAVE_STRTOULL 1)
set(json_c_strtoull "_strtoui64") set(json_c_strtoull "_strtoui64")
endif() endif()
endif()
endif() endif()

View File

@@ -136,9 +136,16 @@
#cmakedefine HAVE_VSYSLOG @HAVE_VSYSLOG@ #cmakedefine HAVE_VSYSLOG @HAVE_VSYSLOG@
#cmakedefine HAVE_STRTOLL #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 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 */ /* Have __thread */
#cmakedefine HAVE___THREAD #cmakedefine HAVE___THREAD

View File

@@ -39,11 +39,6 @@
#endif /* HAVE_UNISTD_H */ #endif /* HAVE_UNISTD_H */
#ifdef WIN32 #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 #define WIN32_LEAN_AND_MEAN
#include <io.h> #include <io.h>
#include <windows.h> #include <windows.h>