From: Dmitrij Tejblum Date: Sun, 16 Jun 2013 11:35:15 +0000 (+0400) Subject: Fix a strict-aliasing GCC warning in getname6(), as the GCC manual suggests. X-Git-Tag: tcpdump-4.5.0~73^2~1^2 X-Git-Url: https://git.tcpdump.org/tcpdump/commitdiff_plain/5aa3566172fad7a700494361475ad62fa7a7996c Fix a strict-aliasing GCC warning in getname6(), as the GCC manual suggests. --- diff --git a/addrtoname.c b/addrtoname.c index c92870dc..745ffe30 100644 --- a/addrtoname.c +++ b/addrtoname.c @@ -273,18 +273,24 @@ const char * getname6(const u_char *ap) { register struct hostent *hp; - struct in6_addr addr; + union { + struct in6_addr addr; + struct for_hash_addr { + char fill[14]; + u_int16_t d; + } addra; + } addr; static struct h6namemem *p; /* static for longjmp() */ register const char *cp; char ntop_buf[INET6_ADDRSTRLEN]; memcpy(&addr, ap, sizeof(addr)); - p = &h6nametable[*(u_int16_t *)&addr.s6_addr[14] & (HASHNAMESIZE-1)]; + p = &h6nametable[addr.addra.d & (HASHNAMESIZE-1)]; for (; p->nxt; p = p->nxt) { if (memcmp(&p->addr, &addr, sizeof(addr)) == 0) return (p->name); } - p->addr = addr; + p->addr = addr.addr; p->nxt = newh6namemem(); /*