SCCS-vsn: sbin/routed/tables.c 5.19
-static char sccsid[] = "@(#)tables.c 5.18 (Berkeley) %G%";
+static char sccsid[] = "@(#)tables.c 5.19 (Berkeley) %G%";
if (rtm.rtm_flags & RTF_HOST) {
rtm.rtm_msglen -= sizeof(w.w_netmask);
} else {
if (rtm.rtm_flags & RTF_HOST) {
rtm.rtm_msglen -= sizeof(w.w_netmask);
} else {
+ register char *cp;
+ int len;
+
rtm.rtm_addrs |= RTA_NETMASK;
rtm.rtm_addrs |= RTA_NETMASK;
- w.w_netmask.sin_len = 8;
w.w_netmask.sin_addr.s_addr =
inet_maskof(w.w_dst.sin_addr.s_addr);
w.w_netmask.sin_addr.s_addr =
inet_maskof(w.w_dst.sin_addr.s_addr);
+ for (cp = (char *)(1 + &w.w_netmask.sin_addr);
+ --cp > (char *) &w.w_netmask; )
+ if (*cp)
+ break;
+ len = cp - (char *)&w.w_netmask;
+ if (len) {
+ len++;
+ w.w_netmask.sin_len = len;
+ len = 1 + ((len - 1) | (sizeof(long) - 1));
+ } else
+ len = sizeof(long);
+ rtm.rtm_msglen -= (sizeof(w.w_netmask) - len);
}
errno = 0;
return write(r, (char *)&w, rtm.rtm_msglen);
}
errno = 0;
return write(r, (char *)&w, rtm.rtm_msglen);