summaryrefslogtreecommitdiff
path: root/nscd/nscd_getgr_r.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2004-02-27 00:55:39 +0000
committerUlrich Drepper <drepper@redhat.com>2004-02-27 00:55:39 +0000
commit261eada2ca65277dcc68565370cb2d321f402c21 (patch)
tree27fa0c2f122c4b7fd471f8ce52c0546dc0e7480a /nscd/nscd_getgr_r.c
parentf15e5528931453edc570998af94b6b4c6d4b904a (diff)
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_getgr_r.c')
-rw-r--r--nscd/nscd_getgr_r.c32
1 files changed, 19 insertions, 13 deletions
diff --git a/nscd/nscd_getgr_r.c b/nscd/nscd_getgr_r.c
index 9d9d7d51ed..50932668f4 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 <kukuk@uni-paderborn.de>, 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;
}