diff --git a/CHANGES b/CHANGES index 8a50133630..00c2b49a38 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +4412. [cleanup] Make fixes for GCC 6. ISC_OFFSET_MAXIMUM macro was + removed. [RT #42721] + 4411. [func] "rndc dnstap -roll" automatically rolls the dnstap output file; the previous version is saved with ".0" suffix, and earlier versions diff --git a/bin/dig/dighost.c b/bin/dig/dighost.c index 7a3126b2d5..d02f6c5ee7 100644 --- a/bin/dig/dighost.c +++ b/bin/dig/dighost.c @@ -2549,7 +2549,7 @@ setup_lookup(dig_lookup_t *lookup) { /* Mask off last address byte */ if (addrl > 0 && (plen % 8) != 0) - addr[addrl - 1] &= ~0 << (8 - (plen % 8)); + addr[addrl - 1] &= ~0U << (8 - (plen % 8)); /* family */ isc_buffer_putuint16(&b, family); diff --git a/bin/named/client.c b/bin/named/client.c index e0c3558d82..3faf6d2e11 100644 --- a/bin/named/client.c +++ b/bin/named/client.c @@ -2037,7 +2037,7 @@ process_ecs(ns_client_t *client, isc_buffer_t *buf, size_t optlen) { optlen -= addrbytes; if ((addrlen % 8) != 0) { - isc_uint8_t bits = ~0 << (8 - (addrlen % 8)); + isc_uint8_t bits = ~0U << (8 - (addrlen % 8)); bits &= paddr[addrbytes - 1]; if (bits != paddr[addrbytes - 1]) return (DNS_R_OPTERR); diff --git a/bin/named/logconf.c b/bin/named/logconf.c index 3dad682397..5442e06399 100644 --- a/bin/named/logconf.c +++ b/bin/named/logconf.c @@ -135,6 +135,22 @@ channel_fromconf(const cfg_obj_t *channel, isc_logconfig_t *logconfig) cfg_tuple_get(fileobj, "versions"); isc_int32_t versions = ISC_LOG_ROLLNEVER; isc_offset_t size = 0; + isc_uint64_t maxoffset; + + /* + * isc_offset_t is a signed integer type, so the maximum + * value is all 1s except for the MSB. + */ + switch (sizeof(isc_offset_t)) { + case 4: + maxoffset = 0x7fffffffLLU; + break; + case 8: + maxoffset = 0x7fffffffffffffffLLU; + break; + default: + INSIST(0); + } type = ISC_LOG_TOFILE; @@ -145,7 +161,7 @@ channel_fromconf(const cfg_obj_t *channel, isc_logconfig_t *logconfig) versions = ISC_LOG_ROLLINFINITE; if (sizeobj != NULL && cfg_obj_isuint64(sizeobj) && - cfg_obj_asuint64(sizeobj) < ISC_OFFSET_MAXIMUM) + cfg_obj_asuint64(sizeobj) < maxoffset) size = (isc_offset_t)cfg_obj_asuint64(sizeobj); dest.file.stream = NULL; dest.file.name = cfg_obj_asstring(pathobj); diff --git a/bin/tools/mdig.c b/bin/tools/mdig.c index 0c85ece689..9f63cd1523 100644 --- a/bin/tools/mdig.c +++ b/bin/tools/mdig.c @@ -606,7 +606,7 @@ sendquery(struct query *query, isc_task_t *task) memmove(addr, &sin->sin_addr, 4); if ((plen % 8) != 0) addr[addrl-1] &= - ~0 << (8 - (plen % 8)); + ~0U << (8 - (plen % 8)); } else { family = 2; sin6 = (struct sockaddr_in6 *) sa; @@ -615,7 +615,7 @@ sendquery(struct query *query, isc_task_t *task) /* Mask off last address byte */ if (addrl > 0 && (plen % 8) != 0) - addr[addrl - 1] &= ~0 << (8 - (plen % 8)); + addr[addrl - 1] &= ~0U << (8 - (plen % 8)); /* family */ isc_buffer_putuint16(&b, family); diff --git a/lib/dns/rdata/generic/opt_41.c b/lib/dns/rdata/generic/opt_41.c index 353ac25e1b..cd02399472 100644 --- a/lib/dns/rdata/generic/opt_41.c +++ b/lib/dns/rdata/generic/opt_41.c @@ -158,7 +158,7 @@ fromwire_opt(ARGS_FROMWIRE) { return (DNS_R_OPTERR); if (addrbytes != 0U && (addrlen % 8) != 0) { - isc_uint8_t bits = ~0 << (8 - (addrlen % 8)); + isc_uint8_t bits = ~0U << (8 - (addrlen % 8)); bits &= sregion.base[addrbytes - 1]; if (bits != sregion.base[addrbytes - 1]) return (DNS_R_OPTERR); diff --git a/lib/isc/radix.c b/lib/isc/radix.c index b85ce5a301..415a660dfd 100644 --- a/lib/isc/radix.c +++ b/lib/isc/radix.c @@ -122,8 +122,8 @@ _comp_with_mask(void *addr, void *dest, u_int mask) { return (1); if (memcmp(addr, dest, mask / 8) == 0) { - int n = mask / 8; - int m = ((~0) << (8 - (mask % 8))); + u_int n = mask / 8; + u_int m = ((~0U) << (8 - (mask % 8))); if ((mask % 8) == 0 || (((u_char *)addr)[n] & m) == (((u_char *)dest)[n] & m)) diff --git a/lib/isc/unix/include/isc/offset.h b/lib/isc/unix/include/isc/offset.h index f28aa509da..d63ae99f9f 100644 --- a/lib/isc/unix/include/isc/offset.h +++ b/lib/isc/unix/include/isc/offset.h @@ -21,17 +21,4 @@ typedef off_t isc_offset_t; -/*% - * POSIX says "Additionally, blkcnt_t and off_t are extended signed integral - * types", so the maximum value is all 1s except for the high bit. - * This definition is more complex than it really needs to be because it was - * crafted to keep both the SunOS 5.6 and the HP/UX 11 compilers quiet about - * integer overflow. For example, though this is equivalent to just left - * shifting 1 to the high bit and then inverting the bits, the SunOS compiler - * is unhappy about shifting a positive "1" to negative in a signed integer. - */ -#define ISC_OFFSET_MAXIMUM \ - (~(((off_t)-1 >> (sizeof(off_t) * CHAR_BIT - 1)) \ - << (sizeof(off_t) * CHAR_BIT - 1))) - #endif /* ISC_OFFSET_H */ diff --git a/lib/isc/win32/include/isc/offset.h b/lib/isc/win32/include/isc/offset.h index ce25f57842..ef26ea96a9 100644 --- a/lib/isc/win32/include/isc/offset.h +++ b/lib/isc/win32/include/isc/offset.h @@ -19,17 +19,4 @@ typedef _off_t isc_offset_t; -/* - * POSIX says "Additionally, blkcnt_t and off_t are extended signed integral - * types", so the maximum value is all 1s except for the high bit. - * This definition is more complex than it really needs to be because it was - * crafted to keep both the SunOS 5.6 and the HP/UX 11 compilers quiet about - * integer overflow. For example, though this is equivalent to just left - * shifting 1 to the high bit and then inverting the bits, the SunOS compiler - * is unhappy about shifting a positive "1" to negative in a signed integer. - */ -#define ISC_OFFSET_MAXIMUM \ - (~(((off_t)-1 >> (sizeof(off_t) * CHAR_BIT - 1)) \ - << (sizeof(off_t) * CHAR_BIT - 1))) - #endif /* ISC_OFFSET_H */