なかだです。

At Mon, 14 Apr 2003 18:35:12 +0900,
WATANABE Hirofumi wrote:
> BUFCHECKでrootも更新しないと
> 			 if (!(b = strrdirsep(root))) {
> 			     *p = '/';
> 			 }
> 			 else {
> 			     p = b;
> 			 }
> の p = b; でまずいんじゃないかなあ。

たしかに。

しかし、rootが必要なのって
    while (*s) {
のループに入ってからだけなのでこれでどうでしょう。


Index: file.c =================================================================== RCS file: //sharui/cvs/ruby/src/ruby/file.c,v retrieving revision 1.143 diff -u -2 -p -r1.143 file.c --- file.c 14 Apr 2003 09:04:43 -0000 1.143 +++ file.c 14 Apr 2003 10:09:00 -0000 @@ -1493,7 +1493,7 @@ chompdirsep(path) } -#define BUFCHECK(cond) while (cond) {\ +#define BUFCHECK(cond) if (cond) { long bdiff = p - buf;\ - buflen *= 2;\ + do {buflen *= 2;} while (cond);\ rb_str_resize(result, buflen);\ buf = RSTRING(result)->ptr;\ @@ -1678,5 +1678,7 @@ file_expand_path(fname, dname, result) #endif if (s > b) { + long rootdiff = root - buf; BUFCHECK(p + (s-b+1) >= pend); + root = buf + rootdiff; memcpy(++p, b, s-b); p += s-b;
-- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦