* nss/getnssent_r.c (__nss_getent_r): Use EAGAIN instead of errno
authorRoland McGrath <roland@gnu.org>
Thu, 12 Sep 2002 02:58:43 +0000 (02:58 +0000)
committerRoland McGrath <roland@gnu.org>
Thu, 12 Sep 2002 02:58:43 +0000 (02:58 +0000)
when using h_errno and it's not set to NETDB_INTERNAL.
* nss/getXXbyYY_r.c [NEED_H_ERRNO]: Likewise.

* Makefile ($(common-objpfx)testrun.sh): New target.
(others): Depend on it.
(postclean-generated): Append it.

ChangeLog
Makefile
nss/getXXbyYY_r.c
nss/getnssent_r.c

index 688e0d5..87c225b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
 2002-09-11  Roland McGrath  <roland@redhat.com>
 
+       * nss/getnssent_r.c (__nss_getent_r): Use EAGAIN instead of errno
+       when using h_errno and it's not set to NETDB_INTERNAL.
+       * nss/getXXbyYY_r.c [NEED_H_ERRNO]: Likewise.
+
+       * Makefile ($(common-objpfx)testrun.sh): New target.
+       (others): Depend on it.
+       (postclean-generated): Append it.
+
        * nss/bug-erange.c: New file.
        * nss/Makefile (tests): Add it.
 
index 1c40af0..41f571e 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -130,6 +130,21 @@ ifeq (yes,$(build-shared))
 # Build the shared object from the PIC object library.
 lib: $(common-objpfx)libc.so
 endif
+
+
+# This is a handy script for running any dynamically linked program against
+# the current libc build for testing.
+$(common-objpfx)testrun.sh: $(common-objpfx)config.make \
+                           $(..)Makeconfig $(..)Makefile
+       (echo '#!/bin/sh'; \
+        echo "GCONV_PATH='$(common-objpfx)iconvdata' \\"; \
+        echo 'exec $(run-program-prefix) $${1+"$$@"}'; \
+       ) > $@T
+       chmod a+x $@T
+       mv -f $@T $@
+postclean-generated += testrun.sh
+
+others: $(common-objpfx)testrun.sh
 \f
 # Makerules creates a file `stubs' in each subdirectory, which
 # contains `#define __stub_FUNCTION' for each function defined in that
index 58cf293..0208480 100644 (file)
@@ -244,6 +244,13 @@ done:
 #endif
   return (status == NSS_STATUS_SUCCESS
          ? 0 : (status == NSS_STATUS_TRYAGAIN ? errno : ENOENT));
+  return (status == NSS_STATUS_SUCCESS ? 0
+         : status != NSS_STATUS_TRYAGAIN ? ENOENT
+#ifdef NEED_H_ERRNO
+         /* These functions only set errno if h_errno is NETDB_INTERNAL.  */
+         : *h_errnop != NETDB_INTERNAL ? EAGAIN
+#endif
+         : errno);
 }
 
 
index 39c867c..c1f8965 100644 (file)
@@ -197,6 +197,9 @@ __nss_getent_r (const char *getent_func_name,
     }
 
   *result = status == NSS_STATUS_SUCCESS ? resbuf : NULL;
-  return (status == NSS_STATUS_SUCCESS
-         ? 0 : status == NSS_STATUS_TRYAGAIN ? errno : ENOENT);
+  return (status == NSS_STATUS_SUCCESS ? 0
+         : status != NSS_STATUS_TRYAGAIN ? ENOENT
+         /* h_errno functions only set errno if h_errno is NETDB_INTERNAL.  */
+         : (h_errnop == NULL || *h_errnop == NETDB_INTERNAL) ? errno
+         : EAGAIN);
 }