Include files for missing prototypes, remove buggy declaration of prototypes.
[kopensolaris-gnu/glibc.git] / nss / getXXent.c
index 497c0de..0c8bcb4 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997, 1999 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 1999, 2000 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
 
 /*******************************************************************\
 |* Here we assume several symbols to be defined:                  *|
-|*                                                                *|
+|*                                                                *|
 |* LOOKUP_TYPE   - the return type of the function                *|
-|*                                                                *|
+|*                                                                *|
 |* GETFUNC_NAME  - name of the non-reentrant getXXXent function           *|
-|*                                                                *|
+|*                                                                *|
 |* BUFLEN       - size of static buffer                           *|
-|*                                                                *|
+|*                                                                *|
 |* Optionally the following vars can be defined:                  *|
-|*                                                                *|
+|*                                                                *|
 |* NEED_H_ERRNO  - an extra parameter will be passed to point to   *|
 |*                the global `h_errno' variable.                  *|
-|*                                                                *|
+|*                                                                *|
 \*******************************************************************/
 
 /* To make the real sources a bit prettier.  */
 /* 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;
 }
 
@@ -121,8 +93,7 @@ GETFUNC_NAME (void)
 static void __attribute__ ((unused))
 free_mem (void)
 {
-  if (buffer != NULL)
-    free (buffer);
+  free (buffer);
 }
 
 text_set_element (__libc_subfreeres, free_mem);