ruby-changes:19020
From: nobu <ko1@a...>
Date: Tue, 8 Mar 2011 09:25:48 +0900 (JST)
Subject: [ruby-changes:19020] Ruby:r31058 (trunk): * process.c (proc_setgroups): use getgrnam() if getgrnam_r() is
nobu 2011-03-08 09:25:40 +0900 (Tue, 08 Mar 2011) New Revision: 31058 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=31058 Log: * process.c (proc_setgroups): use getgrnam() if getgrnam_r() is not available. Modified files: trunk/ChangeLog trunk/configure.in trunk/process.c Index: configure.in =================================================================== --- configure.in (revision 31057) +++ configure.in (revision 31058) @@ -1306,7 +1306,7 @@ setitimer setruid seteuid setreuid setresuid setproctitle socketpair\ setrgid setegid setregid setresgid issetugid pause lchown lchmod\ getpgrp setpgrp getpgid setpgid initgroups getgroups setgroups\ - getpriority getrlimit setrlimit sysconf close\ + getpriority getrlimit setrlimit sysconf close getgrnam_r\ dlopen sigprocmask sigaction sigsetjmp _setjmp _longjmp\ setsid telldir seekdir fchmod cosh sinh tanh log2 round\ setuid setgid daemon select_large_fdset setenv unsetenv\ Index: ChangeLog =================================================================== --- ChangeLog (revision 31057) +++ ChangeLog (revision 31058) @@ -1,5 +1,8 @@ -Tue Mar 8 09:08:00 2011 Nobuyoshi Nakada <nobu@r...> +Tue Mar 8 09:25:23 2011 Nobuyoshi Nakada <nobu@r...> + * process.c (proc_setgroups): use getgrnam() if getgrnam_r() is + not available. + * process.c: RARRAY_LEN() returns long int. Tue Mar 8 09:07:03 2011 Nobuyoshi Nakada <nobu@r...> Index: process.c =================================================================== --- process.c (revision 31057) +++ process.c (revision 31058) @@ -4626,12 +4626,14 @@ { int ngroups, i; rb_gid_t *groups; +#ifdef HAVE_GETGRNAM_R long getgr_buf_len = sysconf(_SC_GETGR_R_SIZE_MAX); char* getgr_buf; if (getgr_buf_len < 0) getgr_buf_len = 4096; getgr_buf = ALLOCA_N(char, getgr_buf_len); +#endif Check_Type(ary, T_ARRAY); @@ -4657,16 +4659,20 @@ groups[i] = NUM2GIDT(g); } else { - StringValue(tmp); + const char *grpname = StringValueCStr(tmp); - ret = getgrnam_r(RSTRING_PTR(tmp), &grp, getgr_buf, getgr_buf_len, &p); +#ifdef HAVE_GETGRNAM_R + ret = getgrnam_r(grpname, &grp, getgr_buf, getgr_buf_len, &p); if (ret) rb_sys_fail("getgrnam_r"); +#else + p = getgrnam(grpname); +#endif if (p == NULL) { rb_raise(rb_eArgError, "can't find group for %s", RSTRING_PTR(tmp)); } - groups[i] = grp.gr_gid; + groups[i] = p->gr_gid; } } } -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/