svn commit: samba r26468 - in branches/SAMBA_4_0: . source/lib/replace source/lib/replace/test

jelmer at samba.org jelmer at samba.org
Sun Dec 16 02:49:53 GMT 2007


Author: jelmer
Date: 2007-12-16 02:49:52 +0000 (Sun, 16 Dec 2007)
New Revision: 26468

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=26468

Log:
Match getifaddrs more closely, add trivial test.
Modified:
   branches/SAMBA_4_0/
   branches/SAMBA_4_0/source/lib/replace/getifaddrs.c
   branches/SAMBA_4_0/source/lib/replace/test/testsuite.c


Changeset:

Property changes on: branches/SAMBA_4_0
___________________________________________________________________
Name: bzr:revision-info
...skipped...
Name: bzr:file-ids
...skipped...
Name: bzr:revision-id:v3-trunk0
...skipped...

Modified: branches/SAMBA_4_0/source/lib/replace/getifaddrs.c
===================================================================
--- branches/SAMBA_4_0/source/lib/replace/getifaddrs.c	2007-12-16 02:39:01 UTC (rev 26467)
+++ branches/SAMBA_4_0/source/lib/replace/getifaddrs.c	2007-12-16 02:49:52 UTC (rev 26468)
@@ -112,7 +112,6 @@
 		}
 
 		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;
@@ -124,10 +123,7 @@
 			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);
@@ -201,6 +197,13 @@
 	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);
@@ -208,11 +211,9 @@
 			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);
@@ -221,15 +222,7 @@
 			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;
@@ -310,7 +303,6 @@
 		}
 
 		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;
@@ -322,10 +314,7 @@
 			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);

Modified: branches/SAMBA_4_0/source/lib/replace/test/testsuite.c
===================================================================
--- branches/SAMBA_4_0/source/lib/replace/test/testsuite.c	2007-12-16 02:39:01 UTC (rev 26467)
+++ branches/SAMBA_4_0/source/lib/replace/test/testsuite.c	2007-12-16 02:49:52 UTC (rev 26468)
@@ -856,6 +856,25 @@
 	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)
 {
@@ -903,6 +922,7 @@
 	ret &= test_MAX();
 	ret &= test_socketpair();
 	ret &= test_strptime();
+	ret &= test_getifaddrs();
 
 	return ret;
 }



More information about the samba-cvs mailing list