Blob Blame History Raw
diff -up ntp-4.2.4p2/libisc/ifiter_sysctl.c.noif ntp-4.2.4p2/libisc/ifiter_sysctl.c
--- ntp-4.2.4p2/libisc/ifiter_sysctl.c.noif	2006-06-06 22:16:23.000000000 +0200
+++ ntp-4.2.4p2/libisc/ifiter_sysctl.c	2007-09-24 16:08:55.000000000 +0200
@@ -309,7 +309,10 @@ internal_destroy(isc_interfaceiter_t *it
 	 */
 }
 
-static
-void internal_first(isc_interfaceiter_t *iter) {
+static isc_result_t
+internal_first(isc_interfaceiter_t *iter) {
 	iter->pos = 0;
+	if (iter->pos >= iter->bufused)
+		return (ISC_R_NOMORE);
+	return (ISC_R_SUCCESS);
 }
diff -up ntp-4.2.4p2/libisc/ifiter_ioctl.c.noif ntp-4.2.4p2/libisc/ifiter_ioctl.c
--- ntp-4.2.4p2/libisc/ifiter_ioctl.c.noif	2007-09-24 16:08:55.000000000 +0200
+++ ntp-4.2.4p2/libisc/ifiter_ioctl.c	2007-09-24 16:08:55.000000000 +0200
@@ -1098,8 +1098,8 @@ internal_destroy(isc_interfaceiter_t *it
 #endif
 }
 
-static
-void internal_first(isc_interfaceiter_t *iter) {
+static isc_result_t
+internal_first(isc_interfaceiter_t *iter) {
 #ifdef HAVE_TRUCLUSTER
 	int clua_result;
 #endif
@@ -1118,5 +1118,10 @@ void internal_first(isc_interfaceiter_t 
 #endif
 #ifdef __linux
 	linux_if_inet6_first(iter);
+	if (iter->valid == ISC_R_SUCCESS)
+		return (iter->valid);
 #endif
+	if (iter->pos >= (unsigned int) iter->ifc.ifc_len)
+		return (ISC_R_NOMORE);
+	return (ISC_R_SUCCESS);
 }
diff -up ntp-4.2.4p2/libisc/interfaceiter.c.noif ntp-4.2.4p2/libisc/interfaceiter.c
--- ntp-4.2.4p2/libisc/interfaceiter.c.noif	2006-06-06 22:16:24.000000000 +0200
+++ ntp-4.2.4p2/libisc/interfaceiter.c	2007-09-24 16:08:55.000000000 +0200
@@ -170,14 +170,11 @@ isc_interfaceiter_first(isc_interfaceite
 
 	REQUIRE(VALID_IFITER(iter));
 
-	internal_first(iter);
-	for (;;) {
+	for (result = internal_first(iter); result == ISC_R_SUCCESS;
+			result = internal_next(iter)) {
 		result = internal_current(iter);
 		if (result != ISC_R_IGNORE)
 			break;
-		result = internal_next(iter);
-		if (result != ISC_R_SUCCESS)
-			break;
 	}
 	iter->result = result;
 	return (result);
diff -up ntp-4.2.4p2/libisc/ifiter_getifaddrs.c.noif ntp-4.2.4p2/libisc/ifiter_getifaddrs.c
--- ntp-4.2.4p2/libisc/ifiter_getifaddrs.c.noif	2006-06-06 22:16:22.000000000 +0200
+++ ntp-4.2.4p2/libisc/ifiter_getifaddrs.c	2007-09-24 16:08:55.000000000 +0200
@@ -185,7 +185,10 @@ internal_destroy(isc_interfaceiter_t *it
 	iter->ifaddrs = NULL;
 }
 
-static
-void internal_first(isc_interfaceiter_t *iter) {
+static isc_result_t
+internal_first(isc_interfaceiter_t *iter) {
 	iter->pos = iter->ifaddrs;
+	if (iter->pos == NULL)
+		return (ISC_R_NOMORE);
+	return (ISC_R_SUCCESS);
 }