summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog2
-rw-r--r--nss/getXXent_r.c39
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);