nfs-utils: Eliminate dereferencing type punned pointers
authorChuck Lever <chuck.lever@oracle.com>
Tue, 30 Oct 2012 18:01:34 +0000 (14:01 -0400)
committerSteve Dickson <steved@redhat.com>
Tue, 30 Oct 2012 19:30:08 +0000 (15:30 -0400)
Removed a number of Wstrict-aliasing warnings

Note also that site-local IPv6 addresses are deprecated, and thus
are no longer encountered.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
support/include/sockaddr.h

index 9af2543..72766db 100644 (file)
@@ -193,16 +193,14 @@ compare_sockaddr6(const struct sockaddr *sa1, const struct sockaddr *sa2)
 {
        const struct sockaddr_in6 *sin1 = (const struct sockaddr_in6 *)sa1;
        const struct sockaddr_in6 *sin2 = (const struct sockaddr_in6 *)sa2;
+       const struct in6_addr *saddr1 = &sin1->sin6_addr;
+       const struct in6_addr *saddr2 = &sin2->sin6_addr;
 
-       if ((IN6_IS_ADDR_LINKLOCAL((char *)&sin1->sin6_addr) &&
-            IN6_IS_ADDR_LINKLOCAL((char *)&sin2->sin6_addr)) ||
-           (IN6_IS_ADDR_SITELOCAL((char *)&sin1->sin6_addr) &&
-            IN6_IS_ADDR_SITELOCAL((char *)&sin2->sin6_addr)))
+       if (IN6_IS_ADDR_LINKLOCAL(saddr1) && IN6_IS_ADDR_LINKLOCAL(saddr2))
                if (sin1->sin6_scope_id != sin2->sin6_scope_id)
                        return false;
 
-       return IN6_ARE_ADDR_EQUAL((char *)&sin1->sin6_addr,
-                                       (char *)&sin2->sin6_addr);
+       return IN6_ARE_ADDR_EQUAL(saddr1, saddr2);
 }
 #else  /* !IPV6_SUPPORTED */
 static inline _Bool