diff options
-rw-r--r-- | ChangeLog | 2 | ||||
-rw-r--r-- | nss/getXXent_r.c | 39 |
2 files changed, 20 insertions, 21 deletions
diff --git a/ChangeLog b/ChangeLog index 979d531ca7..14b5008480 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 1998-03-29 Ulrich Drepper <drepper@cygnus.com> + * nss/getXXent_r.c: Correctly handle failing setXXent function. + * inet/netinet/in.h: Use cast to uint32_t in IPv4 macros. Reported by Andreas Jaeger. diff --git a/nss/getXXent_r.c b/nss/getXXent_r.c index b709a4a935..1d27cfc66a 100644 --- a/nss/getXXent_r.c +++ b/nss/getXXent_r.c @@ -261,32 +261,29 @@ INTERNAL (REENTRANT_GETNAME) (LOOKUP_TYPE *resbuf, char *buffer, size_t buflen, && errno == ERANGE) break; - no_more = __nss_next (&nip, GETFUNC_NAME_STRING, (void **) &fct, - status, 0); + do + { + no_more = __nss_next (&nip, GETFUNC_NAME_STRING, (void **) &fct, + status, 0); - if (is_last_nip) - last_nip = nip; + if (is_last_nip) + last_nip = nip; - if (! no_more && current_nip != nip) - /* Call the `setXXent' function. This wasn't done before. */ - do - { - set_function sfct; + if (! no_more) + { + /* Call the `setXXent' function. This wasn't done before. */ + set_function sfct; - no_more = __nss_lookup (&nip, SETFUNC_NAME_STRING, - (void **) &sfct); + no_more = __nss_lookup (&nip, SETFUNC_NAME_STRING, + (void **) &sfct); - if (! no_more) - status = (*sfct) (STAYOPEN_TMPVAR); - else - { + if (! no_more) + status = (*sfct) (STAYOPEN_TMPVAR); + else status = NSS_STATUS_NOTFOUND; - if (no_more == 1) - /* There is no more module to search. */ - break; - } - } - while (! no_more && status != NSS_STATUS_SUCCESS); + } + } + while (! no_more && status != NSS_STATUS_SUCCESS); } __libc_lock_unlock (lock); |