summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChuck Lever <chuck.lever@oracle.com>2012-10-30 14:01:34 -0400
committerSteve Dickson <steved@redhat.com>2012-10-30 15:30:08 -0400
commit6d9909afd0cf82332a0095aa201e515d1a159c97 (patch)
treea9de249a1b27bb8bcff3d03a16399832a759afa6
parentdbc0b5e878b44383cafbefdeb333177ca4a0c295 (diff)
downloadnfs-utils-6d9909afd0cf82332a0095aa201e515d1a159c97.tar.gz
nfs-utils-6d9909afd0cf82332a0095aa201e515d1a159c97.tar.xz
nfs-utils-6d9909afd0cf82332a0095aa201e515d1a159c97.zip
nfs-utils: Eliminate dereferencing type punned pointers
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>
-rw-r--r--support/include/sockaddr.h10
1 files changed, 4 insertions, 6 deletions
diff --git a/support/include/sockaddr.h b/support/include/sockaddr.h
index 9af2543..72766db 100644
--- a/support/include/sockaddr.h
+++ b/support/include/sockaddr.h
@@ -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