X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;ds=sidebyside;f=unix%2Fuxnet.c;h=730f1fa7d5024d3e0dd6d0e28a064005cd045ac4;hb=15386cbe927fc85ac2fed0bb47704645c4b67dad;hp=5058d8ab20409a82f92c159979f6f0cd841ded6d;hpb=41f63b6e5dc8ff83306287ae702d875edff4586f;p=PuTTY.git diff --git a/unix/uxnet.c b/unix/uxnet.c index 5058d8ab..730f1fa7 100644 --- a/unix/uxnet.c +++ b/unix/uxnet.c @@ -37,14 +37,12 @@ * Access to sockaddr types without breaking C strict aliasing rules. */ union sockaddr_union { -#ifdef NO_IPV6 - struct sockaddr_in storage; -#else struct sockaddr_storage storage; - struct sockaddr_in6 sin6; -#endif struct sockaddr sa; struct sockaddr_in sin; +#ifndef NO_IPV6 + struct sockaddr_in6 sin6; +#endif struct sockaddr_un su; }; @@ -780,7 +778,8 @@ Socket sk_new(SockAddr addr, int port, int privport, int oobinline, return (Socket) ret; } -Socket sk_newlistener(char *srcaddr, int port, Plug plug, int local_host_only, int orig_address_family) +Socket sk_newlistener(const char *srcaddr, int port, Plug plug, + int local_host_only, int orig_address_family) { int s; #ifndef NO_IPV6 @@ -1426,26 +1425,27 @@ static void sk_tcp_set_frozen(Socket sock, int is_frozen) static char *sk_tcp_peer_info(Socket sock) { Actual_Socket s = (Actual_Socket) sock; - struct sockaddr_storage addr; + union sockaddr_union addr; socklen_t addrlen = sizeof(addr); +#ifndef NO_IPV6 char buf[INET6_ADDRSTRLEN]; +#endif - if (getpeername(s->s, (struct sockaddr *)&addr, &addrlen) < 0) + if (getpeername(s->s, &addr.sa, &addrlen) < 0) return NULL; - if (addr.ss_family == AF_INET) { + if (addr.storage.ss_family == AF_INET) { return dupprintf ("%s:%d", - inet_ntoa(((struct sockaddr_in *)&addr)->sin_addr), - (int)ntohs(((struct sockaddr_in *)&addr)->sin_port)); + inet_ntoa(addr.sin.sin_addr), + (int)ntohs(addr.sin.sin_port)); #ifndef NO_IPV6 - } else if (addr.ss_family == AF_INET6) { + } else if (addr.storage.ss_family == AF_INET6) { return dupprintf ("[%s]:%d", - inet_ntop(AF_INET6, &((struct sockaddr_in6 *)&addr)->sin6_addr, - buf, sizeof(buf)), - (int)ntohs(((struct sockaddr_in6 *)&addr)->sin6_port)); + inet_ntop(AF_INET6, &addr.sin6.sin6_addr, buf, sizeof(buf)), + (int)ntohs(addr.sin6.sin6_port)); #endif - } else if (addr.ss_family == AF_UNIX) { + } else if (addr.storage.ss_family == AF_UNIX) { /* * For Unix sockets, the source address is unlikely to be * helpful. Instead, we try SO_PEERCRED and try to get the