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

ruby-changes:5120

From: nobu <ko1@a...>
Date: Mon, 26 May 2008 18:25:14 +0900 (JST)
Subject: [ruby-changes:5120] Ruby:r16615 (trunk, ruby_1_8): * file.c (BUFCHECK): no resize if enough room.

nobu	2008-05-26 18:24:56 +0900 (Mon, 26 May 2008)

  New Revision: 16615

  Modified files:
    branches/ruby_1_8/ChangeLog
    branches/ruby_1_8/file.c
    trunk/ChangeLog
    trunk/file.c

  Log:
    * file.c (BUFCHECK): no resize if enough room.
    
    * file.c (file_expand_path): use BUFCHECK.


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/file.c?r1=16615&r2=16614&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/ChangeLog?r1=16615&r2=16614&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=16615&r2=16614&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/file.c?r1=16615&r2=16614&diff_format=u

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 16614)
+++ ChangeLog	(revision 16615)
@@ -1,3 +1,9 @@
+Mon May 26 18:24:48 2008  Nobuyoshi Nakada  <nobu@r...>
+
+	* file.c (BUFCHECK): no resize if enough room.
+
+	* file.c (file_expand_path): use BUFCHECK.
+
 Mon May 26 17:48:42 2008  Akinori MUSHA  <knu@i...>
 
 	* enumerator.c (struct enumerator, enumerator_init)
Index: file.c
===================================================================
--- file.c	(revision 16614)
+++ file.c	(revision 16615)
@@ -2578,13 +2578,13 @@
 
 #define BUFCHECK(cond) do {\
     long bdiff = p - buf;\
-    while (cond) {\
-	buflen *= 2;\
+    if (!(cond)) {\
+	do {buflen *= 2;} while (cond);\
+	rb_str_resize(result, buflen);\
+	buf = RSTRING_PTR(result);\
+	p = buf + bdiff;\
+	pend = buf + buflen;\
     }\
-    rb_str_resize(result, buflen);\
-    buf = RSTRING_PTR(result);\
-    p = buf + bdiff;\
-    pend = buf + buflen;\
 } while (0)
 
 #define BUFINIT() (\
@@ -2731,7 +2731,8 @@
     if (p > buf && p[-1] == '/')
 	--p;
     else {
-	BUFCHECK(bdiff >= ++buflen);
+	++buflen;
+	BUFCHECK(bdiff >= buflen);
 	*p = '/';
     }
 
@@ -2866,7 +2867,6 @@
 #endif
 	HANDLE h = FindFirstFile(b, &wfd);
 	if (h != INVALID_HANDLE_VALUE) {
-	    long bdiff;
 	    FindClose(h);
 	    p = strrdirsep(buf);
 	    len = strlen(wfd.cFileName);
@@ -2877,10 +2877,8 @@
 	    }
 #endif
 	    if (!p) p = buf;
-	    buflen = ++p - buf + len;
-	    bdiff = p - buf;
-	    rb_str_resize(result, buflen);
-	    p = RSTRING_PTR(result) + bdiff;
+	    ++p;
+	    BUFCHECK(bdiff + len >= buflen);
 	    memcpy(p, wfd.cFileName, len + 1);
 	}
     }
Index: ruby_1_8/ChangeLog
===================================================================
--- ruby_1_8/ChangeLog	(revision 16614)
+++ ruby_1_8/ChangeLog	(revision 16615)
@@ -1,3 +1,9 @@
+Mon May 26 18:24:48 2008  Nobuyoshi Nakada  <nobu@r...>
+
+	* file.c (BUFCHECK): no resize if enough room.
+
+	* file.c (file_expand_path): use BUFCHECK.
+
 Mon May 26 16:46:19 2008  NAKAMURA Usaku  <usa@r...>
 
 	* file.c (ntfs_tail): filename which starts with '.' is valid.
Index: ruby_1_8/file.c
===================================================================
--- ruby_1_8/file.c	(revision 16614)
+++ ruby_1_8/file.c	(revision 16615)
@@ -2497,13 +2497,13 @@
 
 #define BUFCHECK(cond) do {\
     long bdiff = p - buf;\
-    while (cond) {\
-	buflen *= 2;\
+    if (!(cond)) {\
+	do {buflen *= 2;} while (cond);\
+	rb_str_resize(result, buflen);\
+	buf = RSTRING_PTR(result);\
+	p = buf + bdiff;\
+	pend = buf + buflen;\
     }\
-    rb_str_resize(result, buflen);\
-    buf = RSTRING(result)->ptr;\
-    p = buf + bdiff;\
-    pend = buf + buflen;\
 } while (0)
 
 #define BUFINIT() (\
@@ -2789,8 +2789,8 @@
 	    }
 #endif
 	    if (!p) p = buf;
-	    buflen = ++p - buf + len;
-	    rb_str_resize(result, buflen);
+	    ++p;
+	    BUFCHECK(bdiff + len >= buflen);
 	    memcpy(p, wfd.cFileName, len + 1);
 	}
     }

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

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