なかだです。 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はできる。 中田 伸悦