This adds struct sockaddr to sockunion so we can just use &foo.su_sa
instead of (struct sockaddr *)&foo. No functional difference but
it lets the compiler warn when appropriate. The diff also sync the
types in struct sockinet to match the first three fields of struct
sockaddr_in.
We could get rid of struct sockinet entirely but I wasn't sure it
was worth it.
- todd
Index: usr.bin/ftp/ftp.c
===================================================================
RCS file: /cvs/src/usr.bin/ftp/ftp.c,v
retrieving revision 1.99
diff -u -p -u -r1.99 ftp.c
--- usr.bin/ftp/ftp.c 20 Aug 2016 20:18:42 -0000 1.99
+++ usr.bin/ftp/ftp.c 21 Aug 2016 20:20:32 -0000
@@ -85,10 +85,11 @@
union sockunion {
struct sockinet {
- u_char si_len;
- u_char si_family;
- u_short si_port;
+ u_int8_t si_len;
+ sa_family_t si_family;
+ in_port_t si_port;
} su_si;
+ struct sockaddr su_sa;
struct sockaddr_in su_sin;
struct sockaddr_in6 su_sin6;
};
@@ -259,7 +260,7 @@ hookup(char *host, char *port)
ares = NULL;
}
#endif /* !SMALL */
- if (getsockname(s, (struct sockaddr *)&myctladdr, &namelen) < 0) {
+ if (getsockname(s, &myctladdr.su_sa, &namelen) < 0) {
warn("getsockname");
code = -1;
goto bad;
@@ -1516,8 +1517,8 @@ reinit:
} else
goto bad;
- for (error = connect(data, (struct sockaddr *)&data_addr,
- data_addr.su_len); error != 0 && errno == EINTR;
+ for (error = connect(data, &data_addr.su_sa, data_addr.su_len);
+ error != 0 && errno == EINTR;
error = connect_wait(data))
continue;
if (error != 0) {
@@ -1573,7 +1574,7 @@ noport:
warn("setsockopt IPV6_PORTRANGE (ignored)");
break;
}
- if (bind(data, (struct sockaddr *)&data_addr, data_addr.su_len) < 0) {
+ if (bind(data, &data_addr.su_sa, data_addr.su_len) < 0) {
warn("bind");
goto bad;
}
@@ -1584,7 +1585,7 @@ noport:
warn("setsockopt (ignored)");
#endif /* !SMALL */
namelen = sizeof(data_addr);
- if (getsockname(data, (struct sockaddr *)&data_addr, &namelen) < 0) {
+ if (getsockname(data, &data_addr.su_sa, &namelen) < 0) {
warn("getsockname");
goto bad;
}
@@ -1610,9 +1611,9 @@ noport:
if (tmp.su_family == AF_INET6)
tmp.su_sin6.sin6_scope_id = 0;
af_tmp = (tmp.su_family == AF_INET) ? 1 : 2;
- if (getnameinfo((struct sockaddr *)&tmp,
- tmp.su_len, hname, sizeof(hname),
- pbuf, sizeof(pbuf), NI_NUMERICHOST |
NI_NUMERICSERV)) {
+ if (getnameinfo(&tmp.su_sa, tmp.su_len, hname,
+ sizeof(hname), pbuf, sizeof(pbuf),
+ NI_NUMERICHOST | NI_NUMERICSERV)) {
result = ERROR;
} else {
result = command("EPRT |%d|%s|%s|",
@@ -1694,7 +1695,7 @@ dataconn(const char *lmode)
if (passivemode)
return (fdopen(data, lmode));
- s = accept(data, (struct sockaddr *) &from, &fromlen);
+ s = accept(data, &from.su_sa, &fromlen);
if (s < 0) {
warn("accept");
(void)close(data), data = -1;