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/