X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=unix%2Fuxnet.c;h=235d6fd97d039d3ed2f97167e68e4285935981ee;hb=f004bcca17a789356c32527a396b68b71a773db2;hp=4d796f5d5cc0eb3b85dcd7cdd16073d3f58e157d;hpb=e00a004e64d9de3f8ff5c4eb745faa326c307057;p=PuTTY.git diff --git a/unix/uxnet.c b/unix/uxnet.c index 4d796f5d..235d6fd9 100644 --- a/unix/uxnet.c +++ b/unix/uxnet.c @@ -126,9 +126,12 @@ struct SockAddr_tag { (addr)->superfamily == UNIX ? AF_UNIX : \ (step).ai ? (step).ai->ai_family : AF_INET) #else +/* Here we gratuitously reference 'step' to avoid gcc warnings about + * 'set but not used' when compiling -DNO_IPV6 */ #define SOCKADDR_FAMILY(addr, step) \ ((addr)->superfamily == UNRESOLVED ? AF_UNSPEC : \ - (addr)->superfamily == UNIX ? AF_UNIX : AF_INET) + (addr)->superfamily == UNIX ? AF_UNIX : \ + (step).curraddr ? AF_INET : AF_INET) #endif /* @@ -331,7 +334,9 @@ void sk_getaddr(SockAddr addr, char *buf, int buflen) } #else struct in_addr a; - assert(SOCKADDR_FAMILY(addr, ignored_macro_parameter) == AF_INET); + SockAddrStep step; + START_STEP(addr, step); + assert(SOCKADDR_FAMILY(addr, step) == AF_INET); a.s_addr = htonl(addr->addresses[0]); strncpy(buf, inet_ntoa(a), buflen); buf[buflen-1] = '\0'; @@ -386,7 +391,9 @@ int sk_address_is_local(SockAddr addr) return sockaddr_is_loopback(addr->ais->ai_addr); #else struct in_addr a; - assert(SOCKADDR_FAMILY(addr, ignored_macro_parameter) == AF_INET); + SockAddrStep step; + START_STEP(addr, step); + assert(SOCKADDR_FAMILY(addr, step) == AF_INET); a.s_addr = htonl(addr->addresses[0]); return ipv4_is_loopback(a); #endif @@ -400,8 +407,10 @@ int sk_address_is_special_local(SockAddr addr) int sk_addrtype(SockAddr addr) { + SockAddrStep step; int family; - family = SOCKADDR_FAMILY(addr, ignored_macro_parameter); + START_STEP(addr, step); + family = SOCKADDR_FAMILY(addr, step); return (family == AF_INET ? ADDRTYPE_IPV4 : #ifndef NO_IPV6 @@ -771,7 +780,7 @@ Socket sk_newlistener(char *srcaddr, int port, Plug plug, int local_host_only, i { int s; #ifndef NO_IPV6 - struct addrinfo hints, *ai; + struct addrinfo hints, *ai = NULL; char portstr[6]; #endif union sockaddr_union u; @@ -917,6 +926,12 @@ Socket sk_newlistener(char *srcaddr, int port, Plug plug, int local_host_only, i } retcode = bind(s, &addr->sa, addrlen); + +#ifndef NO_IPV6 + if (ai) + freeaddrinfo(ai); +#endif + if (retcode < 0) { close(s); ret->error = strerror(errno);