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/