diff options
author | Ulrich Drepper <drepper@redhat.com> | 2004-02-27 00:55:39 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2004-02-27 00:55:39 +0000 |
commit | 261eada2ca65277dcc68565370cb2d321f402c21 (patch) | |
tree | 27fa0c2f122c4b7fd471f8ce52c0546dc0e7480a /nscd/nscd_getpw_r.c | |
parent | f15e5528931453edc570998af94b6b4c6d4b904a (diff) | |
download | glibc-261eada2ca65277dcc68565370cb2d321f402c21.tar glibc-261eada2ca65277dcc68565370cb2d321f402c21.tar.gz glibc-261eada2ca65277dcc68565370cb2d321f402c21.tar.bz2 glibc-261eada2ca65277dcc68565370cb2d321f402c21.zip |
Update.
2004-02-26 Ulrich Drepper <drepper@redhat.com>
* nss/getXXbyYY_r.c: Pass result also to the nscd_* function. Don't
set *result here.
* nscd/nscd_proto.h: Add new argument for pointer to result pointer
to all nscd_* functions.
* nscd/nscd_getgr_r.c (nscd_getgr_r): Add new parameter. Store result
pointer in the address provided by the new parameter if successful.
Otherwise store NULL. Return zero if no entry found.
(__nscd_getgrnam_r, __nscd_getgrgid_r): Add new parameter and pass
it on.
* nscd/nscd_gethst_r.c (nscd_gethst_r): Add new parameter. Store
result pointer in the address provided by the new parameter if
successful. Otherwise store NULL. Return zero if no entry found.
(__nscd_gethostbyname_r, __nscd_gethostbyname2_r,
__nscd_gethostbyaddr_r): Add new parameter and pass it on.
* nscd/nscd_getpw_r.c (nscd_getpw_r): Add new parameter. Store result
pointer in the address provided by the new parameter if successful.
Otherwise store NULL. Return zero if no entry found.
(__nscd_getpwnam_r, __nscd_getpwuid_r): Add new parameter and pass
it on.
Diffstat (limited to 'nscd/nscd_getpw_r.c')
-rw-r--r-- | nscd/nscd_getpw_r.c | 33 |
1 files changed, 21 insertions, 12 deletions
diff --git a/nscd/nscd_getpw_r.c b/nscd/nscd_getpw_r.c index b0135d443c..747c39bed9 100644 --- a/nscd/nscd_getpw_r.c +++ b/nscd/nscd_getpw_r.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 1999, 2003 Free Software Foundation, Inc. +/* Copyright (C) 1998, 1999, 2003, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk <kukuk@uni-paderborn.de>, 1998. @@ -35,43 +35,45 @@ int __nss_not_use_nscd_passwd; static int nscd_getpw_r (const char *key, size_t keylen, request_type type, struct passwd *resultbuf, char *buffer, - size_t buflen) internal_function; + size_t buflen, struct passwd **result) + internal_function; int __nscd_getpwnam_r (const char *name, struct passwd *resultbuf, char *buffer, - size_t buflen) + size_t buflen, struct passwd **result) { if (name == NULL) return -1; return nscd_getpw_r (name, strlen (name) + 1, GETPWBYNAME, resultbuf, - buffer, buflen); + buffer, buflen, result); } int __nscd_getpwuid_r (uid_t uid, struct passwd *resultbuf, char *buffer, - size_t buflen) + size_t buflen, struct passwd **result) { char buf[12]; size_t n; n = __snprintf (buf, sizeof (buf), "%d", uid) + 1; - return nscd_getpw_r (buf, n, GETPWBYUID, resultbuf, buffer, buflen); + return nscd_getpw_r (buf, n, GETPWBYUID, resultbuf, buffer, buflen, result); } static int internal_function nscd_getpw_r (const char *key, size_t keylen, request_type type, - struct passwd *resultbuf, char *buffer, size_t buflen) + struct passwd *resultbuf, char *buffer, size_t buflen, + struct passwd **result) { int sock = __nscd_open_socket (); request_header req; pw_response_header pw_resp; ssize_t nbytes; struct iovec vec[2]; - int result = -1; + int retval = -1; if (sock == -1) { @@ -79,6 +81,9 @@ nscd_getpw_r (const char *key, size_t keylen, request_type type, return -1; } + /* No value found so far. */ + *result = NULL; + req.version = NSCD_VERSION; req.type = type; req.key_len = keylen; @@ -114,7 +119,7 @@ nscd_getpw_r (const char *key, size_t keylen, request_type type, if (__builtin_expect (buflen < total, 0)) { __set_errno (ERANGE); - result = ERANGE; + retval = ERANGE; goto out; } @@ -140,17 +145,21 @@ nscd_getpw_r (const char *key, size_t keylen, request_type type, nbytes = TEMP_FAILURE_RETRY (__read (sock, buffer, total)); if (nbytes == (ssize_t) total) - result = 0; + { + retval = 0; + *result = resultbuf; + } } else { /* The `errno' to some value != ERANGE. */ __set_errno (ENOENT); - result = ENOENT; + /* Even though we have not found anything, the result is zero. */ + retval = 0; } out: __close (sock); - return result; + return retval; } |