getifaddrs: one less indent level

This commit is contained in:
rofl0r 2013-04-05 22:08:03 +02:00
parent c82f53f67c
commit 69a1983872

View File

@ -137,39 +137,37 @@ int getifaddrs(struct ifaddrs **ifap)
struct ifreq reqs[32]; /* arbitrary chosen boundary */ struct ifreq reqs[32]; /* arbitrary chosen boundary */
struct ifconf conf = {.ifc_len = sizeof reqs, .ifc_req = reqs}; struct ifconf conf = {.ifc_len = sizeof reqs, .ifc_req = reqs};
if(-1 == ioctl(sock, SIOCGIFCONF, &conf)) goto err; if(-1 == ioctl(sock, SIOCGIFCONF, &conf)) goto err;
else { size_t reqitems = conf.ifc_len / sizeof(struct ifreq);
size_t reqitems = conf.ifc_len / sizeof(struct ifreq); for(head = list; head; head = (stor*)head->next) {
for(head = list; head; head = (stor*)head->next) { size_t i;
size_t i; for(i = 0; i < reqitems; i++) {
for(i = 0; i < reqitems; i++) { // get SIOCGIFADDR of active interfaces.
// get SIOCGIFADDR of active interfaces. if(!strcmp(reqs[i].ifr_name, head->name)) {
if(!strcmp(reqs[i].ifr_name, head->name)) { head->addr.v4 = *(struct sockaddr_in*)&reqs[i].ifr_addr;
head->addr.v4 = *(struct sockaddr_in*)&reqs[i].ifr_addr; head->ifa.ifa_addr = (struct sockaddr*) &head->addr;
head->ifa.ifa_addr = (struct sockaddr*) &head->addr; break;
break;
}
} }
struct ifreq req; }
snprintf(req.ifr_name, sizeof req.ifr_name, "%s", head->name); struct ifreq req;
if(-1 == ioctl(sock, SIOCGIFFLAGS, &req)) goto err; snprintf(req.ifr_name, sizeof req.ifr_name, "%s", head->name);
if(-1 == ioctl(sock, SIOCGIFFLAGS, &req)) goto err;
head->ifa.ifa_flags = req.ifr_flags; head->ifa.ifa_flags = req.ifr_flags;
if(head->ifa.ifa_addr) { if(head->ifa.ifa_addr) {
/* or'ing flags with IFF_LOWER_UP on active interfaces to mimic glibc */ /* or'ing flags with IFF_LOWER_UP on active interfaces to mimic glibc */
head->ifa.ifa_flags |= IFF_LOWER_UP; head->ifa.ifa_flags |= IFF_LOWER_UP;
if(-1 == ioctl(sock, SIOCGIFNETMASK, &req)) goto err; if(-1 == ioctl(sock, SIOCGIFNETMASK, &req)) goto err;
head->netmask.v4 = *(struct sockaddr_in*)&req.ifr_netmask; head->netmask.v4 = *(struct sockaddr_in*)&req.ifr_netmask;
head->ifa.ifa_netmask = (struct sockaddr*) &head->netmask; head->ifa.ifa_netmask = (struct sockaddr*) &head->netmask;
if(head->ifa.ifa_flags & IFF_POINTOPOINT) { if(head->ifa.ifa_flags & IFF_POINTOPOINT) {
if(-1 == ioctl(sock, SIOCGIFDSTADDR, &req)) goto err; if(-1 == ioctl(sock, SIOCGIFDSTADDR, &req)) goto err;
head->dst.v4 = *(struct sockaddr_in*)&req.ifr_dstaddr; head->dst.v4 = *(struct sockaddr_in*)&req.ifr_dstaddr;
} else { } else {
if(-1 == ioctl(sock, SIOCGIFBRDADDR, &req)) goto err; if(-1 == ioctl(sock, SIOCGIFBRDADDR, &req)) goto err;
head->dst.v4 = *(struct sockaddr_in*)&req.ifr_broadaddr; head->dst.v4 = *(struct sockaddr_in*)&req.ifr_broadaddr;
}
head->ifa.ifa_ifu.ifu_dstaddr = (struct sockaddr*) &head->dst;
} }
head->ifa.ifa_ifu.ifu_dstaddr = (struct sockaddr*) &head->dst;
} }
} }
close(sock); close(sock);