summaryrefslogtreecommitdiff
path: root/file.c
diff options
context:
space:
mode:
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