}
curif->ifa_name = strdup(ifr[i].ifr_name);
- curif->ifa_flags = ifreq.ifr_flags;
curif->ifa_addr = sockaddr_dup(&ifr[i].ifr_addr);
curif->ifa_dstaddr = NULL;
curif->ifa_data = NULL;
return -1;
}
- if (!(ifr[i].ifr_flags & IFF_UP)) {
- freeifaddrs(curif);
- continue;
- }
+ curif->ifa_flags = ifr[i].ifr_flags;
if (ioctl(fd, SIOCGIFNETMASK, &ifr[i]) != 0) {
freeifaddrs(*ifap);
for (i = 0; i<n && total < max_interfaces; i++) {
ifreq = ifr[i];
+ curif = calloc(1, sizeof(struct ifaddrs));
+ if (lastif == NULL) {
+ *ifap = curif;
+ } else {
+ lastif->ifa_next = (*ifap);
+ }
+
strioctl.ic_cmd = SIOCGIFFLAGS;
strioctl.ic_dp = (char *)&ifreq;
strioctl.ic_len = sizeof(struct ifreq);
freeifaddrs(*ifap);
return -1;
}
-
- if (!(ifreq.ifr_flags & IFF_UP)) {
- continue;
- }
+ curif->ifa_flags = ifreq.ifr_flags;
+
strioctl.ic_cmd = SIOCGIFADDR;
strioctl.ic_dp = (char *)&ifreq;
strioctl.ic_len = sizeof(struct ifreq);
return -1;
}
- curif = calloc(1, sizeof(struct ifaddrs));
- if (lastif == NULL) {
- *ifap = curif;
- } else {
- lastif->ifa_next = (*ifap);
- }
-
curif->ifa_name = strdup(ifreq.ifr_name);
- curif->ifa_flags = ifreq.ifr_flags;
curif->ifa_addr = sockaddr_dup(&ifreq.ifr_addr);
curif->ifa_dstaddr = NULL;
curif->ifa_data = NULL;
}
curif->ifa_name = strdup(ifr->ifr_name);
- curif->ifa_flags = ifr->ifr_flags;
curif->ifa_addr = sockaddr_dup(&ifr->ifr_addr);
curif->ifa_dstaddr = NULL;
curif->ifa_data = NULL;
return -1;
}
- if (!(ifr->ifr_flags & IFF_UP)) {
- freeaddrinfo(curif);
- continue;
- }
+ curif->ifa_flags = ifr->ifr_flags;
if (ioctl(fd, SIOCGIFNETMASK, ifr) != 0) {
freeaddrinfo(*ifap);
return libreplace_test_strptime();
}
+static int test_getifaddrs(void)
+{
+ struct ifaddrs *ifa;
+ int ret;
+
+ printf("test: getifaddrs\n");
+
+ ret = getifaddrs(&ifa);
+ if (ret != 0) {
+ printf("failure: getifaddrs\n");
+ return false;
+ }
+
+ freeifaddrs(ifa);
+
+ printf("success: getifaddrs\n");
+ return true;
+}
+
struct torture_context;
bool torture_local_replace(struct torture_context *ctx)
{
ret &= test_MAX();
ret &= test_socketpair();
ret &= test_strptime();
+ ret &= test_getifaddrs();
return ret;
}