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

ruby-changes:19220

From: kosaki <ko1@a...>
Date: Mon, 11 Apr 2011 21:18:38 +0900 (JST)
Subject: [ruby-changes:19220] Ruby:r31259 (trunk): * file.c (rb_group_member): kill 256K of stack usage.

kosaki	2011-04-11 21:18:32 +0900 (Mon, 11 Apr 2011)

  New Revision: 31259

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=31259

  Log:
    * file.c (rb_group_member): kill 256K of stack usage.
      the patch was written by Eric Wong. [ruby-core:35699]

  Modified files:
    trunk/ChangeLog
    trunk/file.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 31258)
+++ ChangeLog	(revision 31259)
@@ -1,3 +1,8 @@
+Mon Apr 11 21:15:54 2011  KOSAKI Motohiro  <kosaki.motohiro@g...>
+
+	* file.c (rb_group_member): kill 256K of stack usage.
+	  the patch was written by Eric Wong. [ruby-core:35699]
+
 Mon Apr 11 07:24:13 2011  Eric Hodel  <drbrain@s...>
 
 	* ext/openssl/ossl.c:  Fix typo, document version constants.
Index: file.c
===================================================================
--- file.c	(revision 31258)
+++ file.c	(revision 31259)
@@ -982,6 +982,7 @@
 static int
 rb_group_member(GETGROUPS_T gid)
 {
+    int rv = FALSE;
 #ifndef _WIN32
     if (getgid() == gid || getegid() == gid)
 	return TRUE;
@@ -995,17 +996,22 @@
 #   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

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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