Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2013-05-14 13:07:30 +0400
committerCorinna Vinschen <corinna@vinschen.de>2013-05-14 13:07:30 +0400
commitccd40e46d70bea835a39ab20f7baa2724e82e11b (patch)
tree10a7f12f482af2581b63dbc4428071ae613f5a4d /winsup/cygwin/grp.cc
parentee6ed1db45b2da59b18f705909933bbfe1854917 (diff)
* grp.cc (get_groups): Convert to void function.
(initgroups32): Accommodate the aforementioned change. (getgrouplist): Ditto.
Diffstat (limited to 'winsup/cygwin/grp.cc')
-rw-r--r--winsup/cygwin/grp.cc56
1 files changed, 24 insertions, 32 deletions
diff --git a/winsup/cygwin/grp.cc b/winsup/cygwin/grp.cc
index 59ec5becc..7ff9e59b2 100644
--- a/winsup/cygwin/grp.cc
+++ b/winsup/cygwin/grp.cc
@@ -438,7 +438,7 @@ getgroups (int gidsetsize, __gid16_t *grouplist)
#endif
/* Core functionality of initgroups and getgrouplist. */
-static int
+static void
get_groups (const char *user, gid_t gid, cygsidlist &gsids)
{
cygheap->user.deimpersonate ();
@@ -450,26 +450,21 @@ get_groups (const char *user, gid_t gid, cygsidlist &gsids)
if (grpsid.getfromgr (gr))
gsids += grpsid;
cygheap->user.reimpersonate ();
- return 0;
}
extern "C" int
initgroups32 (const char *user, gid_t gid)
{
- int ret;
-
assert (user != NULL);
cygsidlist tmp_gsids (cygsidlist_auto, 12);
- if (!(ret = get_groups (user, gid, tmp_gsids)))
- {
- cygsidlist new_gsids (cygsidlist_alloc, tmp_gsids.count ());
- for (int i = 0; i < tmp_gsids.count (); i++)
- new_gsids.sids[i] = tmp_gsids.sids[i];
- new_gsids.count (tmp_gsids.count ());
- cygheap->user.groups.update_supp (new_gsids);
- }
- syscall_printf ( "%d = initgroups(%s, %u)", ret, user, gid);
- return ret;
+ get_groups (user, gid, tmp_gsids);
+ cygsidlist new_gsids (cygsidlist_alloc, tmp_gsids.count ());
+ for (int i = 0; i < tmp_gsids.count (); i++)
+ new_gsids.sids[i] = tmp_gsids.sids[i];
+ new_gsids.count (tmp_gsids.count ());
+ cygheap->user.groups.update_supp (new_gsids);
+ syscall_printf ( "0 = initgroups(%s, %u)", user, gid);
+ return 0;
}
#ifdef __x86_64__
@@ -485,7 +480,9 @@ initgroups (const char *user, __gid16_t gid)
extern "C" int
getgrouplist (const char *user, gid_t gid, gid_t *groups, int *ngroups)
{
- int ret;
+ int ret = 0;
+ int cnt = 0;
+ struct group *gr;
/* Note that it's not defined if groups or ngroups may be NULL!
GLibc does not check the pointers on entry and just uses them.
@@ -496,23 +493,18 @@ getgrouplist (const char *user, gid_t gid, gid_t *groups, int *ngroups)
assert (ngroups != NULL);
cygsidlist tmp_gsids (cygsidlist_auto, 12);
- if (!(ret = get_groups (user, gid, tmp_gsids)))
- {
- int cnt = 0;
- for (int i = 0; i < tmp_gsids.count (); i++)
- {
- struct group *gr = internal_getgrsid (tmp_gsids.sids[i]);
- if (gr)
- {
- if (groups && cnt < *ngroups)
- groups[cnt] = gr->gr_gid;
- ++cnt;
- }
- }
- if (cnt > *ngroups)
- ret = -1;
- *ngroups = cnt;
- }
+ get_groups (user, gid, tmp_gsids);
+ for (int i = 0; i < tmp_gsids.count (); i++)
+ if ((gr = internal_getgrsid (tmp_gsids.sids[i])) != NULL)
+ {
+ if (groups && cnt < *ngroups)
+ groups[cnt] = gr->gr_gid;
+ ++cnt;
+ }
+ if (cnt > *ngroups)
+ ret = -1;
+ *ngroups = cnt;
+
syscall_printf ( "%d = getgrouplist(%s, %u, %p, %d)",
ret, user, gid, groups, *ngroups);
return ret;