return;
/* Allocate space for the interfaces list. */
- for (ifa = ifaddrs; ifa -> ifa_next; ifa = ifa -> ifa_next) {
+ for (ifa = ifaddrs; ifa != NULL; ifa = ifa -> ifa_next) {
/* Skip interfaces marked "down" and "loopback". */
if (ifa->ifa_addr == NULL || !(ifa->ifa_flags & IFF_UP) ||
(ifa->ifa_flags & IFF_LOOPBACK))
break;
}
}
+ if (num_interfaces == 0)
+ return;
interfaces =
(struct interface *) emalloc2(num_interfaces, sizeof(struct interface));
/* Store the ip addr / netmask pairs. */
- for (ifa = ifaddrs, i = 0; ifa -> ifa_next; ifa = ifa -> ifa_next) {
+ for (ifa = ifaddrs, i = 0; ifa != NULL; ifa = ifa -> ifa_next) {
/* Skip interfaces marked "down" and "loopback". */
if (ifa->ifa_addr == NULL || !(ifa->ifa_flags & IFF_UP) ||
(ifa->ifa_flags & IFF_LOOPBACK))
}
/*
- * Get interface configuration or return (leaving num_interfaces 0)
+ * Get interface configuration or return (leaving num_interfaces == 0)
*/
for (;;) {
ifconf_buf = erealloc(ifconf_buf, len);
break;
len += BUFSIZ;
}
+ if (n == 0)
+ return;
/* Allocate space for the maximum number of interfaces that could exist. */
n = ifconf->ifc_len / sizeof(struct ifreq);