diff options
Diffstat (limited to 'nss/getXXbyYY_r.c')
-rw-r--r-- | nss/getXXbyYY_r.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/nss/getXXbyYY_r.c b/nss/getXXbyYY_r.c index aca6a94a35..a0e0e003b7 100644 --- a/nss/getXXbyYY_r.c +++ b/nss/getXXbyYY_r.c @@ -247,13 +247,24 @@ done: #ifdef POSTPROCESS POSTPROCESS; #endif - return (status == NSS_STATUS_SUCCESS ? 0 + + int result; + if (status == NSS_STATUS_SUCCESS) + result = 0; + /* Don't pass back ERANGE if this is not for a too-small buffer. */ + else if (errno == ERANGE && status != NSS_STATUS_TRYAGAIN) + { #ifdef NEED_H_ERRNO - /* These functions only set errno if h_errno is NETDB_INTERNAL. */ - : status == NSS_STATUS_TRYAGAIN && *h_errnop != NETDB_INTERNAL - ? EAGAIN + /* These functions only set errno if h_errno is NETDB_INTERNAL. */ + if (*h_errnop != NETDB_INTERNAL) #endif - : errno); + result = ENOENT; + } + else + return errno; + + __set_errno (result); + return result; } |