]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - support/include/sockaddr.h
Imported upstream 1.2.8
[nfs-utils.git] / support / include / sockaddr.h
index 9af25439c7d59c60ec5fca8bcafad53be185a5ff..a1c30f9bea5da5746f80668c5463ba11fc2e7f6f 100644 (file)
 #ifndef NFS_UTILS_SOCKADDR_H
 #define NFS_UTILS_SOCKADDR_H
 
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_LIBIO_H
 #include <libio.h>
+#endif
 #include <stdbool.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
@@ -193,16 +199,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