Rework logic by turning two dark while into fors.

Also, if kvm_read fail, exit rather than looping forever.
This commit is contained in:
Benoit Dejean
2015-06-28 10:24:33 +02:00
parent cd5649f326
commit 0099cbb6b4

View File

@@ -92,9 +92,8 @@ glibtop_get_netload_p (glibtop *server, glibtop_netload *buf,
const char *interface) const char *interface)
{ {
struct ifnet ifnet; struct ifnet ifnet;
u_long ifnetaddr, ifnetfound; u_long ifnetaddr;
struct sockaddr *sa = NULL; struct sockaddr *sa = NULL;
char name [32];
union { union {
struct ifaddr ifa; struct ifaddr ifa;
@@ -113,30 +112,22 @@ glibtop_get_netload_p (glibtop *server, glibtop_netload *buf,
return; return;
} }
while (ifnetaddr) for (/* NOP */; ifnetaddr; ifnetaddr = (u_long) ifnet.if_link.tqe_next)
{ {
struct sockaddr_in *sin; struct sockaddr_in *sin;
register char *cp; register char *cp;
u_long ifaddraddr; u_long ifaddraddr;
{
ifnetfound = ifnetaddr;
if (kvm_read (server->machine.kd, ifnetaddr, &ifnet, if (kvm_read (server->machine.kd, ifnetaddr, &ifnet,
sizeof (ifnet)) != sizeof (ifnet)) { sizeof (ifnet)) != sizeof (ifnet)) {
glibtop_warn_io_r (server, glibtop_warn_io_r (server,
"kvm_read (ifnetaddr)"); "kvm_read (ifnetaddr)");
continue; break;
} }
g_strlcpy (name, ifnet.if_xname, sizeof(name)); if (strcmp (ifnet.if_xname, interface) != 0)
ifnetaddr = (u_long) ifnet.if_link.tqe_next;
if (strcmp (name, interface) != 0)
continue; continue;
ifaddraddr = (u_long) ifnet.if_addrhead.tqh_first;
}
if (ifnet.if_flags & IFF_UP) if (ifnet.if_flags & IFF_UP)
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_UP); buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_UP);
if (ifnet.if_flags & IFF_BROADCAST) if (ifnet.if_flags & IFF_BROADCAST)
@@ -193,12 +184,12 @@ glibtop_get_netload_p (glibtop *server, glibtop_netload *buf,
buf->collisions = ifnet.if_collisions; buf->collisions = ifnet.if_collisions;
buf->flags = _glibtop_sysdeps_netload; buf->flags = _glibtop_sysdeps_netload;
while (ifaddraddr) { for (ifaddraddr = (u_long) ifnet.if_addrhead.tqh_first; ifaddraddr; ifaddraddr = (u_long) ifaddr.ifa.ifa_link.tqe_next) {
if ((kvm_read (server->machine.kd, ifaddraddr, &ifaddr, if ((kvm_read (server->machine.kd, ifaddraddr, &ifaddr,
sizeof (ifaddr)) != sizeof (ifaddr))) { sizeof (ifaddr)) != sizeof (ifaddr))) {
glibtop_warn_io_r (server, glibtop_warn_io_r (server,
"kvm_read (ifaddraddr)"); "kvm_read (ifaddraddr)");
continue; break;
} }
#define CP(x) ((char *)(x)) #define CP(x) ((char *)(x))
@@ -247,8 +238,9 @@ glibtop_get_netload_p (glibtop *server, glibtop_netload *buf,
close (in6fd); close (in6fd);
} }
} }
ifaddraddr = (u_long) ifaddr.ifa.ifa_link.tqe_next; } /* end of for ( ifaddraddr ) */
}
return; /* found the interface anyway */
} break;
} /* end of for ( ifnetaddr ) */
} }