diff --git a/ChangeLog b/ChangeLog index 4aebf8bed2..daf0c847ff 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Mon May 26 18:24:48 2008 Nobuyoshi Nakada + + * file.c (BUFCHECK): no resize if enough room. + + * file.c (file_expand_path): use BUFCHECK. + Mon May 26 16:46:19 2008 NAKAMURA Usaku * file.c (ntfs_tail): filename which starts with '.' is valid. diff --git a/file.c b/file.c index 94e421fc82..cc9f030906 100644 --- a/file.c +++ b/file.c @@ -2497,13 +2497,13 @@ ntfs_tail(const char *path) #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 @@ file_expand_path(fname, dname, result) } #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); } }