]> The Tcpdump Group git mirrors - tcpdump/commitdiff
Fix a strict-aliasing GCC warning in getname6(), as the GCC manual suggests. 320/head
authorDmitrij Tejblum <[email protected]>
Sun, 16 Jun 2013 11:35:15 +0000 (15:35 +0400)
committerDmitrij Tejblum <[email protected]>
Sun, 16 Jun 2013 11:37:44 +0000 (15:37 +0400)
addrtoname.c

index c92870dc324a68c0a7a5cb6937ea7f5169b760ce..745ffe3063a6b1b49fc08315395827542794965b 100644 (file)
@@ -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();
 
        /*