Make the existence of gz_intmax() unconditional.

gz_intmax() is noted in zlib.map. This assures it's always there.

madler/zlib#01253ecd7e0a01d311670f2d03c61b82fc12d338
This commit is contained in:
Milan Bulat 2024-01-28 19:43:23 -08:00 committed by Hans Kristian Rosbach
parent 3b8e7f616e
commit 0d2984d0d3
2 changed files with 19 additions and 0 deletions

View File

@ -139,6 +139,7 @@ void Z_INTERNAL gz_error(gz_state *, int, const char *);
/* GT_OFF(x), where x is an unsigned value, is true if x > maximum z_off64_t
value -- needed when comparing unsigned to z_off64_t, which is signed
(possible z_off64_t types off_t, off64_t, and long are all signed) */
unsigned Z_INTERNAL gz_intmax(void);
#define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > INT_MAX)
#endif /* GZGUTS_H_ */

18
gzlib.c
View File

@ -523,3 +523,21 @@ void Z_INTERNAL gz_error(gz_state *state, int err, const char *msg) {
}
(void)snprintf(state->msg, strlen(state->path) + strlen(msg) + 3, "%s%s%s", state->path, ": ", msg);
}
/* portably return maximum value for an int (when limits.h presumed not
available) -- we need to do this to cover cases where 2's complement not
used, since C standard permits 1's complement and sign-bit representations,
otherwise we could just use ((unsigned)-1) >> 1 */
unsigned Z_INTERNAL gz_intmax(void) {
#ifdef INT_MAX
return INT_MAX;
#else
unsigned p = 1, q;
do {
q = p;
p <<= 1;
p++;
} while (p > q);
return q >> 1;
#endif
}