From 99a6fb5e49515accfb93dc6bc79b439d0a4f85ca Mon Sep 17 00:00:00 2001 From: Olivier Gayot Date: Mon, 4 Jun 2018 19:59:09 +0200 Subject: [PATCH] Simplify the algorithm used to determine the IP address Signed-off-by: Olivier Gayot --- src/print_ip_addr.c | 23 +++++++++++++---------- 1 file 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) { -- 2.39.5