diff options
author | kosaki <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-04-11 12:18:32 +0000 |
---|---|---|
committer | kosaki <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-04-11 12:18:32 +0000 |
commit | 3b011d1a00dcad0ae960800778070ec565fcef7e (patch) | |
tree | 3f3223884a1c5704e303da862666032ba0e8e2c6 /file.c | |
parent | 2934feb9fff0821516d66a45998021114defa210 (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.c | 16 |
1 files changed, 11 insertions, 5 deletions
@@ -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 |