From e9dc9863723e111ae05e353d69df857f0169544a Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 1 May 2020 18:32:25 +1000 Subject: [PATCH] Use LONG_LONG_MAX and friends if available. If we don't have LLONG_{MIN,MAX} but do have LONG_LONG_{MIN,MAX} then use those instead. We do calculate these values in configure, but it turns out that at least one compiler (old HP ANSI C) can't parse "-9223372036854775808LL" without mangling it. (It can parse "-9223372036854775807LL" which is presumably why its limits.h defines LONG_LONG_MIN as the latter minus 1.) Fixes rekey test when compiled with the aforementioned compiler. --- configure.ac | 3 ++- defines.h | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index e696ac751..e89d4f17f 100644 --- a/configure.ac +++ b/configure.ac @@ -93,6 +93,7 @@ AC_SUBST([LD]) AC_C_INLINE AC_CHECK_DECL([LLONG_MAX], [have_llong_max=1], , [#include ]) +AC_CHECK_DECL([LONG_LONG_MAX], [have_long_long_max=1], , [#include ]) AC_CHECK_DECL([SYSTR_POLICY_KILL], [have_systr_policy_kill=1], , [ #include #include @@ -3611,7 +3612,7 @@ if test "x$ac_cv_sizeof_long_long_int" = "x4" ; then fi # compute LLONG_MIN and LLONG_MAX if we don't know them. -if test -z "$have_llong_max"; then +if test -z "$have_llong_max" && test -z "$have_long_long_max"; then AC_MSG_CHECKING([for max value of long long]) AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ diff --git a/defines.h b/defines.h index a347a44ff..b8ea88b2d 100644 --- a/defines.h +++ b/defines.h @@ -254,6 +254,13 @@ typedef unsigned int u_int32_t; #define __BIT_TYPES_DEFINED__ #endif +#if !defined(LLONG_MIN) && defined(LONG_LONG_MIN) +#define LLONG_MIN LONG_LONG_MIN +#endif +#if !defined(LLONG_MAX) && defined(LONG_LONG_MAX) +#define LLONG_MAX LONG_LONG_MAX +#endif + #ifndef UINT32_MAX # if defined(HAVE_DECL_UINT32_MAX) && (HAVE_DECL_UINT32_MAX == 0) # if (SIZEOF_INT == 4)