From: Bernhard Reutner-Fischer Date: Tue, 29 Jan 2008 10:33:34 +0000 (-0000) Subject: - be C99 friendly. Anonymous unions are a GNU extension. This change is X-Git-Tag: 1_10_0~239 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=8c69afd992d7cc6c2fc7dea59c3c2bd3f3c21f15;p=oweals%2Fbusybox.git - be C99 friendly. Anonymous unions are a GNU extension. This change is size-neutral WRT -std=gnu99 and fixes several compilation errors for strict C99 mode. --- diff --git a/include/libbb.h b/include/libbb.h index c5b685985..525162d05 100644 --- a/include/libbb.h +++ b/include/libbb.h @@ -340,7 +340,7 @@ typedef struct len_and_sockaddr { #if ENABLE_FEATURE_IPV6 struct sockaddr_in6 sin6; #endif - }; + } u; } len_and_sockaddr; enum { LSA_SIZEOF_SA = sizeof( diff --git a/include/platform.h b/include/platform.h index 1706de0bf..2daa077af 100644 --- a/include/platform.h +++ b/include/platform.h @@ -154,12 +154,11 @@ typedef int socklen_t; /* linux/loop.h relies on __u64. Make sure we have that as a proper type * until userspace is widely fixed. */ -#ifndef __GNUC__ -#if defined __INTEL_COMPILER +#if (defined __INTEL_COMPILER && !defined __GNUC__) || \ + (defined __GNUC__ && defined __STRICT_ANSI__) __extension__ typedef __signed__ long long __s64; __extension__ typedef unsigned long long __u64; -#endif /* __INTEL_COMPILER */ -#endif /* ifndef __GNUC__ */ +#endif /*----- Kernel versioning ------------------------------------*/ #define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) diff --git a/ipsvd/tcpudp.c b/ipsvd/tcpudp.c index 6187eb985..dc61d6f76 100644 --- a/ipsvd/tcpudp.c +++ b/ipsvd/tcpudp.c @@ -254,10 +254,10 @@ int tcpudpsvd_main(int argc, char **argv) local_port = bb_lookup_port(argv[1], tcp ? "tcp" : "udp", 0); lsa = xhost2sockaddr(argv[0], local_port); - sock = xsocket(lsa->sa.sa_family, tcp ? SOCK_STREAM : SOCK_DGRAM, 0); + sock = xsocket(lsa->u.sa.sa_family, tcp ? SOCK_STREAM : SOCK_DGRAM, 0); setsockopt_reuseaddr(sock); sa_len = lsa->len; /* I presume sockaddr len stays the same */ - xbind(sock, &lsa->sa, sa_len); + xbind(sock, &lsa->u.sa, sa_len); if (tcp) xlisten(sock, backlog); else /* udp: needed for recv_from_to to work: */ @@ -273,7 +273,7 @@ int tcpudpsvd_main(int argc, char **argv) #endif if (verbose) { - char *addr = xmalloc_sockaddr2dotted(&lsa->sa); + char *addr = xmalloc_sockaddr2dotted(&lsa->u.sa); printf("%s: info: listening on %s", applet_name, addr); free(addr); #ifndef SSLSVD @@ -299,12 +299,12 @@ int tcpudpsvd_main(int argc, char **argv) sig_unblock(SIGCHLD); if (tcp) { remote.len = sa_len; - conn = accept(sock, &remote.sa, &remote.len); + conn = accept(sock, &remote.u.sa, &remote.len); } else { /* In case recv_from_to won't be able to recover local addr. * Also sets port - recv_from_to is unable to do it. */ local = *lsa; - conn = recv_from_to(sock, NULL, 0, MSG_PEEK, &remote.sa, &local.sa, sa_len); + conn = recv_from_to(sock, NULL, 0, MSG_PEEK, &remote.u.sa, &local.u.sa, sa_len); } sig_block(SIGCHLD); if (conn < 0) { @@ -317,7 +317,7 @@ int tcpudpsvd_main(int argc, char **argv) if (max_per_host) { /* Drop connection immediately if cur_per_host > max_per_host * (minimizing load under SYN flood) */ - remote_ip = xmalloc_sockaddr2dotted_noport(&remote.sa); + remote_ip = xmalloc_sockaddr2dotted_noport(&remote.u.sa); cur_per_host = ipsvd_perhost_add(remote_ip, max_per_host, &hccp); if (cur_per_host > max_per_host) { /* ipsvd_perhost_add detected that max is exceeded @@ -342,14 +342,14 @@ int tcpudpsvd_main(int argc, char **argv) /* Make plain write/send work for this socket by supplying default * destination address. This also restricts incoming packets * to ones coming from this remote IP. */ - xconnect(0, &remote.sa, sa_len); + xconnect(0, &remote.u.sa, sa_len); /* hole? at this point we have no wildcard udp socket... * can this cause clients to get "port unreachable" icmp? * Yup, time window is very small, but it exists (is it?) */ /* Open new non-connected UDP socket for further clients */ - sock = xsocket(lsa->sa.sa_family, tcp ? SOCK_STREAM : SOCK_DGRAM, 0); + sock = xsocket(lsa->u.sa.sa_family, tcp ? SOCK_STREAM : SOCK_DGRAM, 0); setsockopt_reuseaddr(sock); - xbind(sock, &lsa->sa, sa_len); + xbind(sock, &lsa->u.sa, sa_len); socket_want_pktinfo(sock); /* Doesn't work: @@ -358,16 +358,16 @@ int tcpudpsvd_main(int argc, char **argv) * instead - it will "intercept" all following packets, but child * does not expect data coming *from fd #1*! */ #if 0 - /* Make it so that local addr is fixed to localp->sa + /* Make it so that local addr is fixed to localp->u.sa * and we don't accidentally accept packets to other local IPs. */ /* NB: we possibly bind to the _very_ same_ address & port as the one * already bound in parent! This seems to work in Linux. * (otherwise we can move socket to fd #0 only if bind succeeds) */ close(0); set_nport(localp, htons(local_port)); - xmove_fd(xsocket(localp->sa.sa_family, SOCK_DGRAM, 0), 0); + xmove_fd(xsocket(localp->u.sa.sa_family, SOCK_DGRAM, 0), 0); setsockopt_reuseaddr(0); /* crucial */ - xbind(0, &localp->sa, localp->len); + xbind(0, &localp->u.sa, localp->len); #endif } @@ -395,11 +395,11 @@ int tcpudpsvd_main(int argc, char **argv) close(sock); if (need_remote_ip) - remote_addr = xmalloc_sockaddr2dotted(&remote.sa); + remote_addr = xmalloc_sockaddr2dotted(&remote.u.sa); if (need_hostnames) { if (option_mask32 & OPT_h) { - remote_hostname = xmalloc_sockaddr2host_noport(&remote.sa); + remote_hostname = xmalloc_sockaddr2host_noport(&remote.u.sa); if (!remote_hostname) { bb_error_msg("warning: cannot look up hostname for %s", remote_addr); remote_hostname = (char*)""; @@ -410,11 +410,11 @@ int tcpudpsvd_main(int argc, char **argv) * which doesn't know local IP). */ if (tcp) { local.len = sa_len; - getsockname(0, &local.sa, &local.len); + getsockname(0, &local.u.sa, &local.len); } - local_addr = xmalloc_sockaddr2dotted(&local.sa); + local_addr = xmalloc_sockaddr2dotted(&local.u.sa); if (!local_hostname) { - local_hostname = xmalloc_sockaddr2host_noport(&local.sa); + local_hostname = xmalloc_sockaddr2host_noport(&local.u.sa); if (!local_hostname) bb_error_msg_and_die("warning: cannot look up hostname for %s"+9, local_addr); } @@ -440,8 +440,8 @@ int tcpudpsvd_main(int argc, char **argv) * from Linux firewall. Useful when you redirect * an outbond connection to local handler, and it needs * to know where it originally tried to connect */ - if (tcp && getsockopt(0, SOL_IP, SO_ORIGINAL_DST, &lsa->sa, &lsa->len) == 0) { - char *addr = xmalloc_sockaddr2dotted(&lsa->sa); + if (tcp && getsockopt(0, SOL_IP, SO_ORIGINAL_DST, &lsa->u.sa, &lsa->len) == 0) { + char *addr = xmalloc_sockaddr2dotted(&lsa->u.sa); xsetenv("TCPORIGDSTADDR", addr); free(addr); } diff --git a/libbb/xconnect.c b/libbb/xconnect.c index 91c12f4d3..03ae77329 100644 --- a/libbb/xconnect.c +++ b/libbb/xconnect.c @@ -99,13 +99,13 @@ int get_nport(const struct sockaddr *sa) void set_nport(len_and_sockaddr *lsa, unsigned port) { #if ENABLE_FEATURE_IPV6 - if (lsa->sa.sa_family == AF_INET6) { - lsa->sin6.sin6_port = port; + if (lsa->u.sa.sa_family == AF_INET6) { + lsa->u.sin6.sin6_port = port; return; } #endif - if (lsa->sa.sa_family == AF_INET) { - lsa->sin.sin_port = port; + if (lsa->u.sa.sa_family == AF_INET) { + lsa->u.sin.sin_port = port; return; } /* What? UNIX socket? IPX?? :) */ @@ -182,9 +182,9 @@ USE_FEATURE_IPV6(sa_family_t af,) } } #endif - r = xmalloc(offsetof(len_and_sockaddr, sa) + used_res->ai_addrlen); + r = xmalloc(offsetof(len_and_sockaddr, u.sa) + used_res->ai_addrlen); r->len = used_res->ai_addrlen; - memcpy(&r->sa, used_res->ai_addr, used_res->ai_addrlen); + memcpy(&r->u.sa, used_res->ai_addr, used_res->ai_addrlen); set_nport(r, htons(port)); ret: freeaddrinfo(result); @@ -246,9 +246,9 @@ int xsocket_type(len_and_sockaddr **lsap, USE_FEATURE_IPV6(int family,) int sock len = sizeof(struct sockaddr_in6); } #endif - lsa = xzalloc(offsetof(len_and_sockaddr, sa) + len); + lsa = xzalloc(offsetof(len_and_sockaddr, u.sa) + len); lsa->len = len; - lsa->sa.sa_family = family; + lsa->u.sa.sa_family = family; *lsap = lsa; return fd; } @@ -266,13 +266,13 @@ static int create_and_bind_or_die(const char *bindaddr, int port, int sock_type) if (bindaddr && bindaddr[0]) { lsa = xdotted2sockaddr(bindaddr, port); /* user specified bind addr dictates family */ - fd = xsocket(lsa->sa.sa_family, sock_type, 0); + fd = xsocket(lsa->u.sa.sa_family, sock_type, 0); } else { fd = xsocket_type(&lsa, USE_FEATURE_IPV6(AF_UNSPEC,) sock_type); set_nport(lsa, htons(port)); } setsockopt_reuseaddr(fd); - xbind(fd, &lsa->sa, lsa->len); + xbind(fd, &lsa->u.sa, lsa->len); free(lsa); return fd; } @@ -294,17 +294,17 @@ int create_and_connect_stream_or_die(const char *peer, int port) len_and_sockaddr *lsa; lsa = xhost2sockaddr(peer, port); - fd = xsocket(lsa->sa.sa_family, SOCK_STREAM, 0); + fd = xsocket(lsa->u.sa.sa_family, SOCK_STREAM, 0); setsockopt_reuseaddr(fd); - xconnect(fd, &lsa->sa, lsa->len); + xconnect(fd, &lsa->u.sa, lsa->len); free(lsa); return fd; } int xconnect_stream(const len_and_sockaddr *lsa) { - int fd = xsocket(lsa->sa.sa_family, SOCK_STREAM, 0); - xconnect(fd, &lsa->sa, lsa->len); + int fd = xsocket(lsa->u.sa.sa_family, SOCK_STREAM, 0); + xconnect(fd, &lsa->u.sa, lsa->len); return fd; } diff --git a/networking/arping.c b/networking/arping.c index 6383f9a88..f71a98498 100644 --- a/networking/arping.c +++ b/networking/arping.c @@ -311,7 +311,7 @@ int arping_main(int argc, char **argv) /* if (!inet_aton(target, &dst)) - not needed */ { len_and_sockaddr *lsa; lsa = xhost_and_af2sockaddr(target, 0, AF_INET); - memcpy(&dst, &lsa->sin.sin_addr.s_addr, 4); + memcpy(&dst, &lsa->u.sin.sin_addr.s_addr, 4); if (ENABLE_FEATURE_CLEAN_UP) free(lsa); } diff --git a/networking/dnsd.c b/networking/dnsd.c index 19720d6bc..5e7886167 100644 --- a/networking/dnsd.c +++ b/networking/dnsd.c @@ -371,11 +371,11 @@ int dnsd_main(int argc, char **argv) #endif lsa = xdotted2sockaddr(listen_interface, port); - udps = xsocket(lsa->sa.sa_family, SOCK_DGRAM, 0); - xbind(udps, &lsa->sa, lsa->len); + udps = xsocket(lsa->u.sa.sa_family, SOCK_DGRAM, 0); + xbind(udps, &lsa->u.sa, lsa->len); /* xlisten(udps, 50); - ?!! DGRAM sockets are never listened on I think? */ bb_info_msg("Accepting UDP packets on %s", - xmalloc_sockaddr2dotted(&lsa->sa)); + xmalloc_sockaddr2dotted(&lsa->u.sa)); while (1) { int r; @@ -385,7 +385,7 @@ int dnsd_main(int argc, char **argv) // Or else we can exhibit usual UDP ugliness: // [ip1.multihomed.ip2] <= query to ip1 <= peer // [ip1.multihomed.ip2] => reply from ip2 => peer (confused) - r = recvfrom(udps, buf, sizeof(buf), 0, &lsa->sa, &fromlen); + r = recvfrom(udps, buf, sizeof(buf), 0, &lsa->u.sa, &fromlen); if (OPT_verbose) bb_info_msg("Got UDP packet"); if (r < 12 || r > 512) { @@ -395,7 +395,7 @@ int dnsd_main(int argc, char **argv) r = process_packet(buf); if (r <= 0) continue; - sendto(udps, buf, r, 0, &lsa->sa, fromlen); + sendto(udps, buf, r, 0, &lsa->u.sa, fromlen); } return 0; } diff --git a/networking/ftpgetput.c b/networking/ftpgetput.c index 587f000ce..de11f912e 100644 --- a/networking/ftpgetput.c +++ b/networking/ftpgetput.c @@ -348,7 +348,7 @@ int ftpgetput_main(int argc, char **argv) server->lsa = xhost2sockaddr(argv[0], bb_lookup_port(port, "tcp", 21)); if (verbose_flag) { printf("Connecting to %s (%s)\n", argv[0], - xmalloc_sockaddr2dotted(&server->lsa->sa)); + xmalloc_sockaddr2dotted(&server->lsa->u.sa)); } /* Connect/Setup/Configure the FTP session */ diff --git a/networking/httpd.c b/networking/httpd.c index 72949755a..0f18b0fd0 100644 --- a/networking/httpd.c +++ b/networking/httpd.c @@ -1781,18 +1781,18 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr) iobuf = xmalloc(IOBUF_SIZE); rmt_ip = 0; - if (fromAddr->sa.sa_family == AF_INET) { - rmt_ip = ntohl(fromAddr->sin.sin_addr.s_addr); + if (fromAddr->u.sa.sa_family == AF_INET) { + rmt_ip = ntohl(fromAddr->u.sin.sin_addr.s_addr); } #if ENABLE_FEATURE_IPV6 - if (fromAddr->sa.sa_family == AF_INET6 - && fromAddr->sin6.sin6_addr.s6_addr32[0] == 0 - && fromAddr->sin6.sin6_addr.s6_addr32[1] == 0 - && ntohl(fromAddr->sin6.sin6_addr.s6_addr32[2]) == 0xffff) - rmt_ip = ntohl(fromAddr->sin6.sin6_addr.s6_addr32[3]); + if (fromAddr->u.sa.sa_family == AF_INET6 + && fromAddr->u.sin6.sin6_addr.s6_addr32[0] == 0 + && fromAddr->u.sin6.sin6_addr.s6_addr32[1] == 0 + && ntohl(fromAddr->u.sin6.sin6_addr.s6_addr32[2]) == 0xffff) + rmt_ip = ntohl(fromAddr->u.sin6.sin6_addr.s6_addr32[3]); #endif if (ENABLE_FEATURE_HTTPD_CGI || DEBUG || verbose) { - rmt_ip_str = xmalloc_sockaddr2dotted(&fromAddr->sa); + rmt_ip_str = xmalloc_sockaddr2dotted(&fromAddr->u.sa); } if (verbose) { /* this trick makes -v logging much simpler */ @@ -2047,7 +2047,7 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr) lsa = host2sockaddr(proxy_entry->host_port, 80); if (lsa == NULL) send_headers_and_exit(HTTP_INTERNAL_SERVER_ERROR); - if (connect(proxy_fd, &lsa->sa, lsa->len) < 0) + if (connect(proxy_fd, &lsa->u.sa, lsa->len) < 0) send_headers_and_exit(HTTP_INTERNAL_SERVER_ERROR); fdprintf(proxy_fd, "%s %s%s%s%s HTTP/%c.%c\r\n", prequest, /* GET or POST */ @@ -2140,7 +2140,7 @@ static void mini_httpd(int server_socket) /* Wait for connections... */ fromAddr.len = LSA_SIZEOF_SA; - n = accept(server_socket, &fromAddr.sa, &fromAddr.len); + n = accept(server_socket, &fromAddr.u.sa, &fromAddr.len); if (n < 0) continue; @@ -2222,7 +2222,7 @@ static void mini_httpd_inetd(void) len_and_sockaddr fromAddr; fromAddr.len = LSA_SIZEOF_SA; - getpeername(0, &fromAddr.sa, &fromAddr.len); + getpeername(0, &fromAddr.u.sa, &fromAddr.len); handle_incoming_and_exit(&fromAddr); } diff --git a/networking/ifconfig.c b/networking/ifconfig.c index fff5f5d2e..fcbeb2420 100644 --- a/networking/ifconfig.c +++ b/networking/ifconfig.c @@ -392,12 +392,12 @@ int ifconfig_main(int argc, char **argv) continue; /* compat stuff */ lsa = xhost2sockaddr(host, 0); #if ENABLE_FEATURE_IPV6 - if (lsa->sa.sa_family == AF_INET6) { + if (lsa->u.sa.sa_family == AF_INET6) { int sockfd6; struct in6_ifreq ifr6; memcpy((char *) &ifr6.ifr6_addr, - (char *) &(lsa->sin6.sin6_addr), + (char *) &(lsa->u.sin6.sin6_addr), sizeof(struct in6_addr)); /* Create a channel to the NET kernel. */ @@ -411,7 +411,7 @@ int ifconfig_main(int argc, char **argv) continue; } #endif - sai.sin_addr = lsa->sin.sin_addr; + sai.sin_addr = lsa->u.sin.sin_addr; if (ENABLE_FEATURE_CLEAN_UP) free(lsa); } diff --git a/networking/nc.c b/networking/nc.c index b2f590adf..feb9c5db6 100644 --- a/networking/nc.c +++ b/networking/nc.c @@ -103,14 +103,14 @@ int nc_main(int argc, char **argv) if (lport) set_nport(lsa, htons(lport)); setsockopt_reuseaddr(sfd); - xbind(sfd, &lsa->sa, lsa->len); + xbind(sfd, &lsa->u.sa, lsa->len); xlisten(sfd, do_listen); /* can be > 1 */ /* If we didn't specify a port number, * query and print it after listen() */ if (!lport) { socklen_t addrlen = lsa->len; - getsockname(sfd, &lsa->sa, &addrlen); - lport = get_nport(&lsa->sa); + getsockname(sfd, &lsa->u.sa, &addrlen); + lport = get_nport(&lsa->u.sa); fdprintf(2, "%d\n", ntohs(lport)); } close_on_exec_on(sfd); diff --git a/networking/ping.c b/networking/ping.c index 0b33abf9a..382389dc2 100644 --- a/networking/ping.c +++ b/networking/ping.c @@ -209,7 +209,7 @@ int ping_main(int argc, char **argv) alarm(5); /* give the host 5000ms to respond */ #if ENABLE_PING6 - if (lsa->sa.sa_family == AF_INET6) + if (lsa->u.sa.sa_family == AF_INET6) ping6(lsa); else #endif @@ -532,12 +532,12 @@ static void ping4(len_and_sockaddr *lsa) int sockopt; pingsock = create_icmp_socket(); - pingaddr.sin = lsa->sin; + pingaddr.sin = lsa->u.sin; if (source_lsa) { if (setsockopt(pingsock, IPPROTO_IP, IP_MULTICAST_IF, - &source_lsa->sa, source_lsa->len)) + &source_lsa->u.sa, source_lsa->len)) bb_error_msg_and_die("can't set multicast source interface"); - xbind(pingsock, &source_lsa->sa, source_lsa->len); + xbind(pingsock, &source_lsa->u.sa, source_lsa->len); } if (opt_I) setsockopt(pingsock, SOL_SOCKET, SO_BINDTODEVICE, opt_I, strlen(opt_I) + 1); @@ -584,10 +584,10 @@ static void ping6(len_and_sockaddr *lsa) char control_buf[CMSG_SPACE(36)]; pingsock = create_icmp6_socket(); - pingaddr.sin6 = lsa->sin6; + pingaddr.sin6 = lsa->u.sin6; /* untested whether "-I addr" really works for IPv6: */ if (source_lsa) - xbind(pingsock, &source_lsa->sa, source_lsa->len); + xbind(pingsock, &source_lsa->u.sa, source_lsa->len); if (opt_I) setsockopt(pingsock, SOL_SOCKET, SO_BINDTODEVICE, opt_I, strlen(opt_I) + 1); @@ -670,12 +670,12 @@ static void ping(len_and_sockaddr *lsa) printf("PING %s (%s)", hostname, dotted); if (source_lsa) { printf(" from %s", - xmalloc_sockaddr2dotted_noport(&source_lsa->sa)); + xmalloc_sockaddr2dotted_noport(&source_lsa->u.sa)); } printf(": %d data bytes\n", datalen); #if ENABLE_PING6 - if (lsa->sa.sa_family == AF_INET6) + if (lsa->u.sa.sa_family == AF_INET6) ping6(lsa); else #endif @@ -720,11 +720,11 @@ int ping_main(int argc, char **argv) lsa = xhost_and_af2sockaddr(hostname, 0, AF_INET); #endif - if (source_lsa && source_lsa->sa.sa_family != lsa->sa.sa_family) + if (source_lsa && source_lsa->u.sa.sa_family != lsa->u.sa.sa_family) /* leaking it here... */ source_lsa = NULL; - dotted = xmalloc_sockaddr2dotted_noport(&lsa->sa); + dotted = xmalloc_sockaddr2dotted_noport(&lsa->u.sa); ping(lsa); pingstats(0); return EXIT_SUCCESS; diff --git a/networking/pscan.c b/networking/pscan.c index d18f8dbd9..830419371 100644 --- a/networking/pscan.c +++ b/networking/pscan.c @@ -73,14 +73,14 @@ int pscan_main(int argc, char **argv) /* The SOCK_STREAM socket type is implemented on the TCP/IP protocol. */ set_nport(lsap, htons(port)); - s = xsocket(lsap->sa.sa_family, SOCK_STREAM, 0); + s = xsocket(lsap->u.sa.sa_family, SOCK_STREAM, 0); /* We need unblocking socket so we don't need to wait for ETIMEOUT. */ /* Nonblocking connect typically "fails" with errno == EINPROGRESS */ ndelay_on(s); DMSG("connect to port %u", port); start = MONOTONIC_US(); - if (connect(s, &lsap->sa, lsap->len) == 0) { + if (connect(s, &lsap->u.sa, lsap->len) == 0) { /* Unlikely, for me even localhost fails :) */ DMSG("connect succeeded"); goto open; diff --git a/networking/tftp.c b/networking/tftp.c index a2683971a..737ae7893 100644 --- a/networking/tftp.c +++ b/networking/tftp.c @@ -127,7 +127,7 @@ static int tftp( USE_GETPUT(const int cmd,) char *cp; unsigned org_port; - len_and_sockaddr *const from = alloca(offsetof(len_and_sockaddr, sa) + peer_lsa->len); + len_and_sockaddr *const from = alloca(offsetof(len_and_sockaddr, u.sa) + peer_lsa->len); /* Can't use RESERVE_CONFIG_BUFFER here since the allocation * size varies meaning BUFFERS_GO_ON_STACK would fail */ @@ -138,7 +138,7 @@ static int tftp( USE_GETPUT(const int cmd,) port = org_port = htons(port); - socketfd = xsocket(peer_lsa->sa.sa_family, SOCK_DGRAM, 0); + socketfd = xsocket(peer_lsa->u.sa.sa_family, SOCK_DGRAM, 0); /* build opcode */ opcode = TFTP_WRQ; @@ -216,7 +216,7 @@ static int tftp( USE_GETPUT(const int cmd,) fprintf(stderr, "%02x ", (unsigned char) *cp); fprintf(stderr, "\n"); #endif - xsendto(socketfd, xbuf, send_len, &peer_lsa->sa, peer_lsa->len); + xsendto(socketfd, xbuf, send_len, &peer_lsa->u.sa, peer_lsa->len); /* Was it final ACK? then exit */ if (finished && (opcode == TFTP_ACK)) goto ret; @@ -229,14 +229,14 @@ static int tftp( USE_GETPUT(const int cmd,) unsigned from_port; case 1: from->len = peer_lsa->len; - memset(&from->sa, 0, peer_lsa->len); + memset(&from->u.sa, 0, peer_lsa->len); len = recvfrom(socketfd, rbuf, tftp_bufsize, 0, - &from->sa, &from->len); + &from->u.sa, &from->len); if (len < 0) { bb_perror_msg("recvfrom"); goto ret; } - from_port = get_nport(&from->sa); + from_port = get_nport(&from->u.sa); if (port == org_port) { /* Our first query went to port 69 * but reply will come from different one. @@ -316,7 +316,7 @@ static int tftp( USE_GETPUT(const int cmd,) /*static const uint16_t error_8[2] = { htons(TFTP_ERROR), htons(8) };*/ /* thus we open-code big-endian layout */ static const uint8_t error_8[4] = { 0,TFTP_ERROR, 0,8 }; - xsendto(socketfd, error_8, 4, &peer_lsa->sa, peer_lsa->len); + xsendto(socketfd, error_8, 4, &peer_lsa->u.sa, peer_lsa->len); bb_error_msg("server proposes bad blksize %d, exiting", blksize); goto ret; } @@ -449,7 +449,7 @@ int tftp_main(int argc, char **argv) #if ENABLE_DEBUG_TFTP fprintf(stderr, "using server '%s', remotefile '%s', localfile '%s'\n", - xmalloc_sockaddr2dotted(&peer_lsa->sa), + xmalloc_sockaddr2dotted(&peer_lsa->u.sa), remotefile, localfile); #endif diff --git a/networking/udhcp/files.c b/networking/udhcp/files.c index 491b8871e..5bf1a491c 100644 --- a/networking/udhcp/files.c +++ b/networking/udhcp/files.c @@ -19,7 +19,7 @@ static int read_ip(const char *line, void *arg) lsa = host_and_af2sockaddr(line, 0, AF_INET); if (!lsa) return 0; - *(uint32_t*)arg = lsa->sin.sin_addr.s_addr; + *(uint32_t*)arg = lsa->u.sin.sin_addr.s_addr; free(lsa); return 1; } diff --git a/networking/wget.c b/networking/wget.c index 1147077e0..6c1c385b7 100644 --- a/networking/wget.c +++ b/networking/wget.c @@ -535,7 +535,7 @@ int wget_main(int argc, char **argv) lsa = xhost2sockaddr(server.host, server.port); if (!(opt & WGET_OPT_QUIET)) { fprintf(stderr, "Connecting to %s (%s)\n", server.host, - xmalloc_sockaddr2dotted(&lsa->sa)); + xmalloc_sockaddr2dotted(&lsa->u.sa)); /* We leak result of xmalloc_sockaddr2dotted */ } diff --git a/procps/top.c b/procps/top.c index fc393d43b..4df58f227 100644 --- a/procps/top.c +++ b/procps/top.c @@ -594,20 +594,20 @@ static void display_topmem_header(int scr_width) /* 9 */ char *anon; /* 10 */ char *map; /* 11 */ char *slab; - }; + } u; char *str[11]; } Z; -#define total Z.total -#define mfree Z.mfree -#define buf Z.buf -#define cache Z.cache -#define swaptotal Z.swaptotal -#define swapfree Z.swapfree -#define dirty Z.dirty -#define mwrite Z.mwrite -#define anon Z.anon -#define map Z.map -#define slab Z.slab +#define total Z.u.total +#define mfree Z.u.mfree +#define buf Z.u.buf +#define cache Z.u.cache +#define swaptotal Z.u.swaptotal +#define swapfree Z.u.swapfree +#define dirty Z.u.dirty +#define mwrite Z.u.mwrite +#define anon Z.u.anon +#define map Z.u.map +#define slab Z.u.slab #define str Z.str memset(&Z, 0, sizeof(Z)); diff --git a/sysklogd/syslogd.c b/sysklogd/syslogd.c index de8aa04a8..f3ebf9392 100644 --- a/sysklogd/syslogd.c +++ b/sysklogd/syslogd.c @@ -525,7 +525,7 @@ static int try_to_resolve_remote(void) if (!G.remoteAddr) return -1; } - return socket(G.remoteAddr->sa.sa_family, SOCK_DGRAM, 0); + return socket(G.remoteAddr->u.sa.sa_family, SOCK_DGRAM, 0); } #endif @@ -592,7 +592,7 @@ static void do_syslogd(void) } /* send message to remote logger, ignore possible error */ sendto(G.remoteFD, G.recvbuf, sz, MSG_DONTWAIT, - &G.remoteAddr->sa, G.remoteAddr->len); + &G.remoteAddr->u.sa, G.remoteAddr->len); no_luck: ; } #endif diff --git a/util-linux/mount.c b/util-linux/mount.c index 0b440ef16..4ac52cd02 100644 --- a/util-linux/mount.c +++ b/util-linux/mount.c @@ -1496,7 +1496,7 @@ static int singlemount(struct mntent *mp, int ignore_busy) // insert ip=... option into string flags. - dotted = xmalloc_sockaddr2dotted_noport(&lsa->sa); + dotted = xmalloc_sockaddr2dotted_noport(&lsa->u.sa); ip = xasprintf("ip=%s", dotted); parse_mount_options(ip, &filteropts);