diff options
| -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) {  | 
