aboutsummaryrefslogtreecommitdiff
path: root/nss/getXXent.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2000-12-08 22:39:54 +0000
committerUlrich Drepper <drepper@redhat.com>2000-12-08 22:39:54 +0000
commit8b80182964bde1fa84333674e454d41e1fa0c8ca (patch)
treedfdb69a6a515ee5b4152036e710c3ea1fb0f96ec /nss/getXXent.c
parent55f44129526d6bae0595300c03fcd681f83ededb (diff)
downloadglibc-8b80182964bde1fa84333674e454d41e1fa0c8ca.zip
glibc-8b80182964bde1fa84333674e454d41e1fa0c8ca.tar.gz
glibc-8b80182964bde1fa84333674e454d41e1fa0c8ca.tar.bz2
Update.
2000-12-05 H.J. Lu <hjl@gnu.org> * nss/Makefile (routines): Add getnssent and getnssent_r. * nss/nsswitch.h (__nss_setent): New internal NSS function. (__nss_endent): Likewise. (__nss_getent_r): Likewise. (__nss_getent): Likewise. * nss/getnssent_r.c: New file. * nss/getnssent.c: New file. * nss/getXXent.c (H_ERRNO_VAR): Updated. (GETFUNC_NAME): Updated to call __nss_getent (). * nss/getXXent_r.c (H_ERRNO_VAR_P): New. (STAYOPEN_TMPVAR): Updated. (STAYOPEN_VAR): Updated. (SETFUNC_NAME): Updated to call __nss_setent (). (ENDFUNC_NAME): Updated to call __nss_endent (). (INTERNAL (REENTRANT_GETNAME)): Updated to call __nss_getent_r ().
Diffstat (limited to 'nss/getXXent.c')
-rw-r--r--nss/getXXent.c40
1 files changed, 6 insertions, 34 deletions
diff --git a/nss/getXXent.c b/nss/getXXent.c
index d248215..0c8bcb4 100644
--- a/nss/getXXent.c
+++ b/nss/getXXent.c
@@ -48,10 +48,10 @@
/* Sometimes we need to store error codes in the `h_errno' variable. */
#ifdef NEED_H_ERRNO
# define H_ERRNO_PARM , int *h_errnop
-# define H_ERRNO_VAR , &h_errno
+# define H_ERRNO_VAR &h_errno
#else
# define H_ERRNO_PARM
-# define H_ERRNO_VAR
+# define H_ERRNO_VAR NULL
#endif
/* Prototype of the reentrant version. */
@@ -77,42 +77,14 @@ GETFUNC_NAME (void)
/* Get lock. */
__libc_lock_lock (lock);
- if (buffer == NULL)
- {
- buffer_size = BUFLEN;
- buffer = malloc (buffer_size);
- }
+ result = (LOOKUP_TYPE *)
+ __nss_getent ((getent_r_function) INTERNAL (REENTRANT_GETNAME),
+ (void **) &resbuf, &buffer, BUFLEN, &buffer_size,
+ H_ERRNO_VAR);
- while (buffer != NULL
- && INTERNAL (REENTRANT_GETNAME) (&resbuf, buffer, buffer_size, &result
- H_ERRNO_VAR) == ERANGE
-#ifdef NEED_H_ERRNO
- && h_errno == NETDB_INTERNAL
-#endif
- )
- {
- char *new_buf;
- buffer_size += BUFLEN;
- new_buf = realloc (buffer, buffer_size);
- if (new_buf == NULL)
- {
- /* We are out of memory. Free the current buffer so that the
- process gets a chance for a normal termination. */
- save = errno;
- free (buffer);
- __set_errno (save);
- }
- buffer = new_buf;
- }
-
- if (buffer == NULL)
- result = NULL;
-
- /* Release lock. Preserve error value. */
save = errno;
__libc_lock_unlock (lock);
__set_errno (save);
-
return result;
}