---
 src/libstddjb/socket_local46.c | 22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)
diff --git a/src/libstddjb/socket_local46.c b/src/libstddjb/socket_local46.c
index 448160c..611eb37 100644
--- a/src/libstddjb/socket_local46.c
+++ b/src/libstddjb/socket_local46.c
_at_@ -12,21 +12,23 @@
 
 int socket_local46 (int s, ip46_t *ip, uint16 *port)
 {
-  struct sockaddr sa ;
+  union {
+    struct sockaddr_in6 sa6 ;
+    struct sockaddr_in sa4 ;
+    struct sockaddr sa ;
+  } sa ;
   socklen_t dummy = sizeof sa ;
-  if (getsockname(s, &sa, &dummy) < 0) return -1 ;
-  if (sa.sa_family == AF_INET6)
+  if (getsockname(s, &sa.sa, &dummy) < 0) return -1 ;
+  if (sa.sa.sa_family == AF_INET6)
   {
-    register struct sockaddr_in6 *sa6 = (struct sockaddr_in6 *)&sa ;
-    byte_copy(ip->ip, 16, (char const *)sa6->sin6_addr.s6_addr) ;
-    uint16_unpack_big((char *)&sa6->sin6_port, port) ;
+    byte_copy(ip->ip, 16, (char const *)&sa.sa6.sin6_addr.s6_addr) ;
+    uint16_unpack_big((char *)&sa.sa6.sin6_port, port) ;
     ip->is6 = 1 ;
   }
-  else if (sa.sa_family == AF_INET)
+  else if (sa.sa.sa_family == AF_INET)
   {
-    register struct sockaddr_in *sa4 = (struct sockaddr_in *)&sa ;
-    byte_copy(ip->ip, 4, (char const *)&sa4->sin_addr.s_addr) ;
-    uint16_unpack_big((char *)&sa4->sin_port, port) ;
+    byte_copy(ip->ip, 4, (char const *)&sa.sa4.sin_addr.s_addr) ;
+    uint16_unpack_big((char *)&sa.sa4.sin_port, port) ;
     ip->is6 = 0 ;
   }
   else return (errno = EAFNOSUPPORT, -1) ;
-- 
2.4.6
Received on Sun Jul 26 2015 - 19:15:44 UTC
This archive was generated by hypermail 2.3.0 : Sun May 09 2021 - 19:38:49 UTC