* 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
This commit is contained in:
parent
3e7ba606a2
commit
33c9c0005b
@ -1,3 +1,8 @@
|
|||||||
|
Sun Aug 24 00:44:03 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* file.c (file_expand_path): performance improvement.
|
||||||
|
[ruby-talk:79748]
|
||||||
|
|
||||||
Sat Aug 23 18:56:53 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
Sat Aug 23 18:56:53 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
* ext/nkf/nkf.c (rb_nkf_putchar): should use rb_str_resize() to just
|
* ext/nkf/nkf.c (rb_nkf_putchar): should use rb_str_resize() to just
|
||||||
|
17
file.c
17
file.c
@ -1527,14 +1527,16 @@ chompdirsep(path)
|
|||||||
return (char *)path;
|
return (char *)path;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define BUFCHECK(cond) while (cond) {\
|
#define BUFCHECK(cond) do {\
|
||||||
long bdiff = p - buf;\
|
long bdiff = p - buf;\
|
||||||
|
while (cond) {\
|
||||||
buflen *= 2;\
|
buflen *= 2;\
|
||||||
|
}\
|
||||||
rb_str_resize(result, buflen);\
|
rb_str_resize(result, buflen);\
|
||||||
buf = RSTRING(result)->ptr;\
|
buf = RSTRING(result)->ptr;\
|
||||||
p = buf + bdiff;\
|
p = buf + bdiff;\
|
||||||
pend = buf + buflen;\
|
pend = buf + buflen;\
|
||||||
}
|
} while (0)
|
||||||
|
|
||||||
#define BUFINIT() (\
|
#define BUFINIT() (\
|
||||||
p = buf = RSTRING(result)->ptr,\
|
p = buf = RSTRING(result)->ptr,\
|
||||||
@ -1552,7 +1554,7 @@ file_expand_path(fname, dname, result)
|
|||||||
VALUE fname, dname, result;
|
VALUE fname, dname, result;
|
||||||
{
|
{
|
||||||
char *s, *buf, *b, *p, *pend, *root;
|
char *s, *buf, *b, *p, *pend, *root;
|
||||||
long buflen;
|
long buflen, dirlen;
|
||||||
int tainted;
|
int tainted;
|
||||||
|
|
||||||
s = StringValuePtr(fname);
|
s = StringValuePtr(fname);
|
||||||
@ -1566,7 +1568,8 @@ file_expand_path(fname, dname, result)
|
|||||||
if (!dir) {
|
if (!dir) {
|
||||||
rb_raise(rb_eArgError, "couldn't find HOME environment -- expanding `%s'", s);
|
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);
|
strcpy(buf, dir);
|
||||||
#if defined DOSISH || defined __CYGWIN__
|
#if defined DOSISH || defined __CYGWIN__
|
||||||
for (p = buf; *p; p = CharNext(p)) {
|
for (p = buf; *p; p = CharNext(p)) {
|
||||||
@ -1596,7 +1599,8 @@ file_expand_path(fname, dname, result)
|
|||||||
endpwent();
|
endpwent();
|
||||||
rb_raise(rb_eArgError, "user %s doesn't exist", buf);
|
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);
|
strcpy(buf, pwPtr->pw_dir);
|
||||||
p = buf + strlen(pwPtr->pw_dir);
|
p = buf + strlen(pwPtr->pw_dir);
|
||||||
endpwent();
|
endpwent();
|
||||||
@ -1644,7 +1648,8 @@ file_expand_path(fname, dname, result)
|
|||||||
char *dir = my_getcwd();
|
char *dir = my_getcwd();
|
||||||
|
|
||||||
tainted = 1;
|
tainted = 1;
|
||||||
BUFCHECK(strlen(dir) > buflen);
|
dirlen = strlen(dir);
|
||||||
|
BUFCHECK(dirlen > buflen);
|
||||||
strcpy(buf, dir);
|
strcpy(buf, dir);
|
||||||
free(dir);
|
free(dir);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user