summaryrefslogtreecommitdiff
path: root/file.c
diff options
context:
space:
mode:
authorkosaki <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-04-11 12:18:32 +0000
committerkosaki <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-04-11 12:18:32 +0000
commit3b011d1a00dcad0ae960800778070ec565fcef7e (patch)
tree3f3223884a1c5704e303da862666032ba0e8e2c6 /file.c
parent2934feb9fff0821516d66a45998021114defa210 (diff)
* file.c (rb_group_member): kill 256K of stack usage.
the patch was written by Eric Wong. [ruby-core:35699] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31259 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'file.c')
-rw-r--r--file.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/file.c b/file.c
index b743a32fca..476e3e8dd6 100644
--- a/file.c
+++ b/file.c
@@ -982,6 +982,7 @@ rb_file_lstat(VALUE obj)
static int
rb_group_member(GETGROUPS_T gid)
{
+ int rv = FALSE;
#ifndef _WIN32
if (getgid() == gid || getegid() == gid)
return TRUE;
@@ -995,17 +996,22 @@ rb_group_member(GETGROUPS_T gid)
# endif
# endif
{
- GETGROUPS_T gary[NGROUPS];
+ GETGROUPS_T *gary;
int anum;
+ gary = xmalloc(NGROUPS * sizeof(GETGROUPS_T));
anum = getgroups(NGROUPS, gary);
- while (--anum >= 0)
- if (gary[anum] == gid)
- return TRUE;
+ while (--anum >= 0) {
+ if (gary[anum] == gid) {
+ rv = TRUE;
+ break;
+ }
+ }
+ xfree(gary);
}
# endif
#endif
- return FALSE;
+ return rv;
}
#ifndef S_IXUGO