From 33c9c0005b28c9897ef03ac595047e423221103e Mon Sep 17 00:00:00 2001 From: nobu Date: Sat, 23 Aug 2003 15:44:05 +0000 Subject: [PATCH] * file.c (file_expand_path): performance improvement. [ruby-talk:79748] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4436 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 7 ++++++- file.c | 19 ++++++++++++------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2691695a5f..2e97fb83dd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Sun Aug 24 00:44:03 2003 Nobuyoshi Nakada + + * file.c (file_expand_path): performance improvement. + [ruby-talk:79748] + Sat Aug 23 18:56:53 2003 Nobuyoshi Nakada * ext/nkf/nkf.c (rb_nkf_putchar): should use rb_str_resize() to just @@ -513,7 +518,7 @@ add-log-time-format: (lambda () (diff (+ (cadr time) 32400)) (lo (% diff 65536)) (hi (+ (car time) (/ diff 65536)))) - (format-time-string "%a %b %e %H:%M:%S %Y" (list hi lo) t))) + (format-time-string "%a %b %e %H:%M:%S %Y" (list hi lo) t))) indent-tabs-mode: t tab-width: 8 end: diff --git a/file.c b/file.c index b159256f65..5215af78aa 100644 --- a/file.c +++ b/file.c @@ -1527,14 +1527,16 @@ chompdirsep(path) return (char *)path; } -#define BUFCHECK(cond) while (cond) {\ +#define BUFCHECK(cond) do {\ long bdiff = p - buf;\ - buflen *= 2;\ + while (cond) {\ + buflen *= 2;\ + }\ rb_str_resize(result, buflen);\ buf = RSTRING(result)->ptr;\ p = buf + bdiff;\ pend = buf + buflen;\ -} +} while (0) #define BUFINIT() (\ p = buf = RSTRING(result)->ptr,\ @@ -1552,7 +1554,7 @@ file_expand_path(fname, dname, result) VALUE fname, dname, result; { char *s, *buf, *b, *p, *pend, *root; - long buflen; + long buflen, dirlen; int tainted; s = StringValuePtr(fname); @@ -1566,7 +1568,8 @@ file_expand_path(fname, dname, result) if (!dir) { rb_raise(rb_eArgError, "couldn't find HOME environment -- expanding `%s'", s); } - BUFCHECK(strlen(dir) > buflen); + dirlen = strlen(dir); + BUFCHECK(dirlen > buflen); strcpy(buf, dir); #if defined DOSISH || defined __CYGWIN__ for (p = buf; *p; p = CharNext(p)) { @@ -1596,7 +1599,8 @@ file_expand_path(fname, dname, result) endpwent(); rb_raise(rb_eArgError, "user %s doesn't exist", buf); } - BUFCHECK(strlen(pwPtr->pw_dir) > buflen); + dirlen = strlen(pwPtr->pw_dir); + BUFCHECK(dirlen > buflen); strcpy(buf, pwPtr->pw_dir); p = buf + strlen(pwPtr->pw_dir); endpwent(); @@ -1644,7 +1648,8 @@ file_expand_path(fname, dname, result) char *dir = my_getcwd(); tainted = 1; - BUFCHECK(strlen(dir) > buflen); + dirlen = strlen(dir); + BUFCHECK(dirlen > buflen); strcpy(buf, dir); free(dir); }