From 9bfce4bf2865c2981a8d790ae7f6c50c4e87dd97 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Thu, 12 Sep 2002 02:58:43 +0000 Subject: [PATCH] * 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. --- ChangeLog | 8 ++++++++ Makefile | 15 +++++++++++++++ nss/getXXbyYY_r.c | 7 +++++++ nss/getnssent_r.c | 7 +++++-- 4 files changed, 35 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 688e0d5..87c225b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ 2002-09-11 Roland McGrath + * 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. diff --git a/Makefile b/Makefile index 1c40af0..41f571e 100644 --- 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 # Makerules creates a file `stubs' in each subdirectory, which # contains `#define __stub_FUNCTION' for each function defined in that diff --git a/nss/getXXbyYY_r.c b/nss/getXXbyYY_r.c index 58cf293..0208480 100644 --- a/nss/getXXbyYY_r.c +++ b/nss/getXXbyYY_r.c @@ -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); } diff --git a/nss/getnssent_r.c b/nss/getnssent_r.c index 39c867c..c1f8965 100644 --- a/nss/getnssent_r.c +++ b/nss/getnssent_r.c @@ -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); } -- 2.7.4