summaryrefslogtreecommitdiffstats
path: root/usr.bin/netstat/route.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.bin/netstat/route.c')
-rw-r--r--usr.bin/netstat/route.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/usr.bin/netstat/route.c b/usr.bin/netstat/route.c
index 1de12cc..4381ffd 100644
--- a/usr.bin/netstat/route.c
+++ b/usr.bin/netstat/route.c
@@ -631,10 +631,9 @@ fmt_sockaddr(struct sockaddr *sa, struct sockaddr *mask, int flags)
cp = routename(sockin->sin_addr.s_addr);
else if (mask)
cp = netname(sockin->sin_addr.s_addr,
- ntohl(((struct sockaddr_in *)mask)
- ->sin_addr.s_addr));
+ ((struct sockaddr_in *)mask)->sin_addr.s_addr);
else
- cp = netname(sockin->sin_addr.s_addr, 0L);
+ cp = netname(sockin->sin_addr.s_addr, INADDR_ANY);
break;
}
@@ -870,19 +869,21 @@ domask(char *dst, in_addr_t addr __unused, u_long mask)
/*
* Return the name of the network whose address is given.
- * The address is assumed to be that of a net or subnet, not a host.
*/
char *
-netname(in_addr_t in, u_long mask)
+netname(in_addr_t in, in_addr_t mask)
{
char *cp = 0;
static char line[MAXHOSTNAMELEN];
struct netent *np = 0;
in_addr_t i;
+ /* It is ok to supply host address. */
+ in &= mask;
+
i = ntohl(in);
if (!numeric_addr && i) {
- np = getnetbyaddr(i >> NSHIFT(mask), AF_INET);
+ np = getnetbyaddr(i >> NSHIFT(ntohl(mask)), AF_INET);
if (np != NULL) {
cp = np->n_name;
trimdomain(cp, strlen(cp));
@@ -893,7 +894,7 @@ netname(in_addr_t in, u_long mask)
} else {
inet_ntop(AF_INET, &in, line, sizeof(line) - 1);
}
- domask(line + strlen(line), i, mask);
+ domask(line + strlen(line), i, ntohl(mask));
return (line);
}
OpenPOWER on IntegriCloud