From 261eada2ca65277dcc68565370cb2d321f402c21 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Fri, 27 Feb 2004 00:55:39 +0000 Subject: Update. 2004-02-26 Ulrich Drepper * 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. --- nscd/nscd_getgr_r.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) (limited to 'nscd/nscd_getgr_r.c') diff --git a/nscd/nscd_getgr_r.c b/nscd/nscd_getgr_r.c index 9d9d7d5..5093266 100644 --- a/nscd/nscd_getgr_r.c +++ b/nscd/nscd_getgr_r.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1998, 1999, 2000, 2002, 2003 Free Software Foundation, Inc. +/* Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004 + Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk , 1998. @@ -35,42 +36,44 @@ int __nss_not_use_nscd_group; static int nscd_getgr_r (const char *key, size_t keylen, request_type type, struct group *resultbuf, char *buffer, - size_t buflen) internal_function; + size_t buflen, struct group **result) + internal_function; int __nscd_getgrnam_r (const char *name, struct group *resultbuf, char *buffer, - size_t buflen) + size_t buflen, struct group **result) { return nscd_getgr_r (name, strlen (name) + 1, GETGRBYNAME, resultbuf, - buffer, buflen); + buffer, buflen, result); } int __nscd_getgrgid_r (gid_t gid, struct group *resultbuf, char *buffer, - size_t buflen) + size_t buflen, struct group **result) { char buf[12]; size_t n; n = __snprintf (buf, sizeof (buf), "%d", gid) + 1; - return nscd_getgr_r (buf, n, GETGRBYGID, resultbuf, buffer, buflen); + return nscd_getgr_r (buf, n, GETGRBYGID, resultbuf, buffer, buflen, result); } static int internal_function nscd_getgr_r (const char *key, size_t keylen, request_type type, - struct group *resultbuf, char *buffer, size_t buflen) + struct group *resultbuf, char *buffer, size_t buflen, + struct group **result) { int sock = __nscd_open_socket (); request_header req; gr_response_header gr_resp; ssize_t nbytes; struct iovec vec[2]; - int result = -1; + int retval = -1; if (sock == -1) { @@ -121,7 +124,7 @@ nscd_getgr_r (const char *key, size_t keylen, request_type type, { no_room: __set_errno (ERANGE); - result = ERANGE; + retval = ERANGE; goto out; } buflen -= total_len; @@ -169,25 +172,28 @@ nscd_getgr_r (const char *key, size_t keylen, request_type type, if (__builtin_expect (total_len > buflen, 0)) goto no_room; - result = 0; + retval = 0; n = TEMP_FAILURE_RETRY (__read (sock, resultbuf->gr_mem[0], total_len)); if (__builtin_expect (n != total_len, 0)) { /* The `errno' to some value != ERANGE. */ __set_errno (ENOENT); - result = ENOENT; + retval = ENOENT; } + else + *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; } -- cgit v1.1