Make fixes for GCC 6 (#42721)

(cherry picked from commit 4116177ac4)
(cherry picked from commit 2d5581de6e)
This commit is contained in:
Mukund Sivaraman
2016-07-13 13:54:12 +05:30
parent e80adb21c1
commit 48ed0dec09
7 changed files with 24 additions and 31 deletions

View File

@@ -1,3 +1,6 @@
4412. [cleanup] Make fixes for GCC 6. ISC_OFFSET_MAXIMUM macro was
removed. [RT #42721]
4409. [bug] DNS64 should exclude mapped addresses by default when
an exclude acl is not defined. [RT #42810]

View File

@@ -2519,7 +2519,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);

View File

@@ -144,6 +144,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;
@@ -154,7 +170,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);

View File

@@ -167,7 +167,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);

View File

@@ -129,8 +129,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))

View File

@@ -30,17 +30,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 */

View File

@@ -28,17 +28,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 */