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); }