- 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.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 */
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user