[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]