# HG changeset patch # User Paul Eggert # Date 1161041960 0 # Node ID bfd8f6c918c96c70293a912f08bfc137a05d546b # Parent 813cd777c5724ae19ea5c33cfd2c38984e9e1c3a * lib/fsusage.c (PROPAGATE_ALL_ONES): Don't assume uintmax_t is at least as wide as intmax_t. diff --git a/ChangeLog b/ChangeLog --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2006-10-16 Paul Eggert + + * lib/fsusage.c (PROPAGATE_ALL_ONES): Don't assume uintmax_t is + at least as wide as intmax_t. + 2006-10-16 Alexandre Duret-Lutz (Imported from Automake.) diff --git a/lib/fsusage.c b/lib/fsusage.c --- a/lib/fsusage.c +++ b/lib/fsusage.c @@ -61,11 +61,11 @@ a uintmax_t value that is all 1 bits if X is all 1 bits, even if X is unsigned and narrower than uintmax_t. */ #define PROPAGATE_ALL_ONES(x) \ - ((sizeof (x) < sizeof (uintmax_t) \ + ((sizeof (x) != sizeof (uintmax_t) \ && (~ (x) == (sizeof (x) < sizeof (int) \ ? - (1 << (sizeof (x) * CHAR_BIT)) \ : 0))) \ - ? UINTMAX_MAX : (x)) + ? UINTMAX_MAX : (uintmax_t) (x)) /* Extract the top bit of X as an uintmax_t value. */ #define EXTRACT_TOP_BIT(x) ((x) \