about summary refs log tree commit diff
path: root/nss
diff options
context:
space:
mode:
Diffstat (limited to 'nss')
-rw-r--r--nss/getXXbyYY.c13
-rw-r--r--nss/getXXbyYY_r.c17
2 files changed, 13 insertions, 17 deletions
diff --git a/nss/getXXbyYY.c b/nss/getXXbyYY.c
index ece2a0d47c..07e1d8a088 100644
--- a/nss/getXXbyYY.c
+++ b/nss/getXXbyYY.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc.
+/* Copyright (C) 1996-2001,2003 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
@@ -106,7 +106,7 @@ FUNCTION_NAME (ADD_PARAMS)
   if (buffer == NULL)
     {
       buffer_size = BUFLEN;
-      buffer = malloc (buffer_size);
+      buffer = (char *) malloc (buffer_size);
     }
 
 #ifdef HANDLE_DIGITS_DOTS
@@ -132,14 +132,13 @@ FUNCTION_NAME (ADD_PARAMS)
     {
       char *new_buf;
       buffer_size += BUFLEN;
-      new_buf = realloc (buffer, buffer_size);
+      new_buf = (char *) 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);
+	  __set_errno (ENOMEM);
 	}
       buffer = new_buf;
     }
@@ -150,10 +149,8 @@ FUNCTION_NAME (ADD_PARAMS)
 #ifdef HANDLE_DIGITS_DOTS
 done:
 #endif
-  /* Release lock.  Preserve error value.  */
-  save = errno;
+  /* Release lock.  */
   __libc_lock_unlock (lock);
-  __set_errno (save);
 
 #ifdef NEED_H_ERRNO
   if (h_errno_tmp != 0)
diff --git a/nss/getXXbyYY_r.c b/nss/getXXbyYY_r.c
index a0e0e003b7..99639593b8 100644
--- a/nss/getXXbyYY_r.c
+++ b/nss/getXXbyYY_r.c
@@ -248,23 +248,22 @@ done:
   POSTPROCESS;
 #endif
 
-  int result;
+  int res;
   if (status == NSS_STATUS_SUCCESS)
-    result = 0;
+    res = 0;
   /* Don't pass back ERANGE if this is not for a too-small buffer.  */
   else if (errno == ERANGE && status != NSS_STATUS_TRYAGAIN)
-    {
+    res = EINVAL;
 #ifdef NEED_H_ERRNO
-      /* These functions only set errno if h_errno is NETDB_INTERNAL.  */
-      if (*h_errnop != NETDB_INTERNAL)
+  /* These functions only set errno if h_errno is NETDB_INTERNAL.  */
+  else if (status == NSS_STATUS_TRYAGAIN && *h_errnop != NETDB_INTERNAL)
+    res = EAGAIN;
 #endif
-	result = ENOENT;
-    }
   else
     return errno;
 
-  __set_errno (result);
-  return result;
+  __set_errno (res);
+  return res;
 }