From 05e49b15838f5bce440ffc87693f6fc670614ba0 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Thu, 6 Sep 2018 14:41:00 +0200 Subject: [PATCH] strtoll, strtoull: Rely on limits-h module. * lib/strtol.c (TYPE_SIGNED, TYPE_MINIMUM, TYPE_MAXIMUM): Remove macros. (ULLONG_MAX, LLONG_MAX, LLONG_MIN): Remove fallback definitions. * modules/strtoll (Depends-on): Add limits-h. * modules/strtoull (Depends-on): Likewise. --- ChangeLog | 8 ++++++++ lib/strtol.c | 29 ----------------------------- modules/strtoll | 1 + modules/strtoull | 1 + 4 files changed, 10 insertions(+), 29 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3166c7ccbf..4116600e5e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2018-09-06 Bruno Haible + + strtoll, strtoull: Rely on limits-h module. + * lib/strtol.c (TYPE_SIGNED, TYPE_MINIMUM, TYPE_MAXIMUM): Remove macros. + (ULLONG_MAX, LLONG_MAX, LLONG_MIN): Remove fallback definitions. + * modules/strtoll (Depends-on): Add limits-h. + * modules/strtoull (Depends-on): Likewise. + 2018-09-06 Bruno Haible intprops tests: Fix compilation error with pre-C99 compiler. diff --git a/lib/strtol.c b/lib/strtol.c index 55871b4c78..f6f5c3268d 100644 --- a/lib/strtol.c +++ b/lib/strtol.c @@ -117,35 +117,6 @@ # define STRTOL_LONG_MIN LLONG_MIN # define STRTOL_LONG_MAX LLONG_MAX # define STRTOL_ULONG_MAX ULLONG_MAX - -/* The extra casts in the following macros work around compiler bugs, - e.g., in Cray C 5.0.3.0. */ - -/* True if the arithmetic type T is signed. */ -# define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) - -/* Minimum and maximum values for integer types. - These macros have undefined behavior for signed types that either - have padding bits or do not use two's complement. If this is a - problem for you, please let us know how to fix it for your host. */ - -/* The maximum and minimum values for the integer type T. */ -# define TYPE_MINIMUM(t) ((t) ~ TYPE_MAXIMUM (t)) -# define TYPE_MAXIMUM(t) \ - ((t) (! TYPE_SIGNED (t) \ - ? (t) -1 \ - : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) - -# ifndef ULLONG_MAX -# define ULLONG_MAX TYPE_MAXIMUM (unsigned long long) -# endif -# ifndef LLONG_MAX -# define LLONG_MAX TYPE_MAXIMUM (long long int) -# endif -# ifndef LLONG_MIN -# define LLONG_MIN TYPE_MINIMUM (long long int) -# endif - # if __GNUC__ == 2 && __GNUC_MINOR__ < 7 /* Work around gcc bug with using this constant. */ static const unsigned long long int maxquad = ULLONG_MAX; diff --git a/modules/strtoll b/modules/strtoll index 5501fdac3b..082d7f4ee5 100644 --- a/modules/strtoll +++ b/modules/strtoll @@ -8,6 +8,7 @@ m4/longlong.m4 m4/strtoll.m4 Depends-on: +limits-h stdlib configure.ac: diff --git a/modules/strtoull b/modules/strtoull index 6bb66fea22..7f94bcab61 100644 --- a/modules/strtoull +++ b/modules/strtoull @@ -9,6 +9,7 @@ m4/longlong.m4 m4/strtoull.m4 Depends-on: +limits-h stdlib configure.ac: -- 2.39.5