diff options
| author | Olivier Gayot | 2018-06-04 19:59:09 +0200 | 
|---|---|---|
| committer | Olivier Gayot | 2018-06-04 19:59:09 +0200 | 
| commit | 99a6fb5e49515accfb93dc6bc79b439d0a4f85ca (patch) | |
| tree | 9555178f3daa865a950183800bc300d7723cc6e7 | |
| parent | Merge pull request #282 from Stunkymonkey/mem-support (diff) | |
Simplify the algorithm used to determine the IP address
Signed-off-by: Olivier Gayot <olivier.gayot@sigexec.com>
| -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) { | 
