Simplify os_getifaddrs operation for POSIX platforms

Signed-off-by: Jeroen Koekkoek <jeroen@koekkoek.nl>
This commit is contained in:
Jeroen Koekkoek 2018-10-19 10:11:46 +02:00
parent 7ba3bca087
commit 03c081fa18

View file

@ -19,7 +19,7 @@ copyaddr(os_ifaddrs_t **ifap, const struct ifaddrs *sys_ifa)
{ {
int err = 0; int err = 0;
os_ifaddrs_t *ifa; os_ifaddrs_t *ifa;
ssize_t sz; size_t sz;
assert(ifap != NULL); assert(ifap != NULL);
assert(sys_ifa != NULL); assert(sys_ifa != NULL);
@ -31,21 +31,15 @@ copyaddr(os_ifaddrs_t **ifap, const struct ifaddrs *sys_ifa)
} else { } else {
ifa->index = if_nametoindex(sys_ifa->ifa_name); ifa->index = if_nametoindex(sys_ifa->ifa_name);
ifa->flags = sys_ifa->ifa_flags; ifa->flags = sys_ifa->ifa_flags;
if ((ifa->name = os_strdup(sys_ifa->ifa_name)) == NULL) { if ((ifa->name = os_strdup(sys_ifa->ifa_name)) == NULL ||
(ifa->addr = os_memdup(sys_ifa->ifa_addr, sz)) == NULL ||
(sys_ifa->ifa_netmask != NULL &&
(ifa->netmask = os_memdup(sys_ifa->ifa_netmask, sz)) == NULL) ||
(sys_ifa->ifa_broadaddr != NULL &&
(sys_ifa->ifa_flags & IFF_BROADCAST) &&
(ifa->broadaddr = os_memdup(sys_ifa->ifa_broadaddr, sz)) == NULL))
{
err = errno; err = errno;
} else if (sys_ifa->ifa_addr->sa_family == AF_INET6) {
if (!(ifa->addr = os_memdup(sys_ifa->ifa_addr, sz))) {
err = errno;
}
} else {
assert(sys_ifa->ifa_netmask != NULL);
if (!(ifa->addr = os_memdup(sys_ifa->ifa_addr, sz)) ||
!(ifa->netmask = os_memdup(sys_ifa->ifa_netmask, sz)) ||
((sys_ifa->ifa_flags & IFF_BROADCAST) &&
!(ifa->broadaddr = os_memdup(sys_ifa->ifa_broadaddr, sz))))
{
err = errno;
}
} }
} }