diff options
Diffstat (limited to 'src/print_ip_addr.c')
-rw-r--r-- | src/print_ip_addr.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/src/print_ip_addr.c b/src/print_ip_addr.c index c955c1c..cf476ae 100644 --- a/src/print_ip_addr.c +++ b/src/print_ip_addr.c @@ -37,22 +37,25 @@ const char *get_ip_addr(const char *interface, int family) { return NULL; /* Skip until we are at the input family address of interface */ - for (addrp = ifaddr; + for (addrp = ifaddr; addrp != NULL; addrp = addrp->ifa_next) { + if (strncmp(addrp->ifa_name, interface, interface_len) != 0) { + /* The interface does not have the right name, skip it. */ + continue; + } - (addrp != NULL && - (strncmp(addrp->ifa_name, interface, interface_len) != 0 || - addrp->ifa_addr == NULL || - addrp->ifa_addr->sa_family != family)); + if (addrp->ifa_addr != NULL && addrp->ifa_addr->sa_family == family) { + /* We found the right interface with the right address. */ + break; + } - addrp = addrp->ifa_next) { - /* Check if the interface is down */ - if (strncmp(addrp->ifa_name, interface, interface_len) != 0) - continue; - found = true; + /* Check if the interface is down. If it is, no need to look any + * further. */ if ((addrp->ifa_flags & IFF_RUNNING) == 0) { freeifaddrs(ifaddr); return NULL; } + + found = true; } if (addrp == NULL) { |