Bug #9856 ยป process-allocv_n.patch
process.c | ||
---|---|---|
static VALUE
|
||
proc_getgroups(VALUE obj)
|
||
{
|
||
VALUE ary;
|
||
VALUE ary, tmp;
|
||
int i, ngroups;
|
||
rb_gid_t *groups;
|
||
... | ... | |
if (ngroups == -1)
|
||
rb_sys_fail(0);
|
||
groups = ALLOCA_N(rb_gid_t, ngroups);
|
||
groups = ALLOCV_N(rb_gid_t, tmp, ngroups);
|
||
ngroups = getgroups(ngroups, groups);
|
||
if (ngroups == -1)
|
||
... | ... | |
for (i = 0; i < ngroups; i++)
|
||
rb_ary_push(ary, GIDT2NUM(groups[i]));
|
||
ALLOCV_END(tmp);
|
||
return ary;
|
||
}
|
||
#else
|
||
... | ... | |
{
|
||
int ngroups, i;
|
||
rb_gid_t *groups;
|
||
VALUE tmp;
|
||
PREPARE_GETGRNAM;
|
||
Check_Type(ary, T_ARRAY);
|
||
... | ... | |
if (ngroups > maxgroups())
|
||
rb_raise(rb_eArgError, "too many groups, %d max", maxgroups());
|
||
groups = ALLOCA_N(rb_gid_t, ngroups);
|
||
groups = ALLOCV_N(rb_gid_t, tmp, ngroups);
|
||
for (i = 0; i < ngroups; i++) {
|
||
VALUE g = RARRAY_AREF(ary, i);
|
||
... | ... | |
if (setgroups(ngroups, groups) == -1) /* ngroups <= maxgroups */
|
||
rb_sys_fail(0);
|
||
ALLOCV_END(tmp);
|
||
return proc_getgroups(obj);
|
||
}
|
||
#else
|
||
-
|