diff options
author | Olivier Gayot <olivier.gayot@sigexec.com> | 2018-06-04 19:59:09 +0200 |
---|---|---|
committer | Olivier Gayot <olivier.gayot@sigexec.com> | 2018-06-04 19:59:09 +0200 |
commit | 99a6fb5e49515accfb93dc6bc79b439d0a4f85ca (patch) | |
tree | 9555178f3daa865a950183800bc300d7723cc6e7 /src | |
parent | 9f08fe297a59553e6a0f1c0078014afa1209e51b (diff) |
Simplify the algorithm used to determine the IP address
Signed-off-by: Olivier Gayot <olivier.gayot@sigexec.com>
Diffstat (limited to 'src')
-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) { |