* file.c (realpath_rec): use same cache.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26931 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
6a1a02ae83
commit
71f4f96249
@ -1,4 +1,6 @@
|
|||||||
Mon Mar 15 07:38:28 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
Mon Mar 15 07:41:00 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* file.c (realpath_rec): use same cache.
|
||||||
|
|
||||||
* file.c (realpath_internal): regulate separators in prefix.
|
* file.c (realpath_internal): regulate separators in prefix.
|
||||||
[ruby-core:28653]
|
[ruby-core:28653]
|
||||||
|
6
file.c
6
file.c
@ -3087,6 +3087,8 @@ rb_file_s_absolute_path(int argc, VALUE *argv)
|
|||||||
static void
|
static void
|
||||||
realpath_rec(long *prefixlenp, VALUE *resolvedp, char *unresolved, VALUE loopcheck, int strict, int last)
|
realpath_rec(long *prefixlenp, VALUE *resolvedp, char *unresolved, VALUE loopcheck, int strict, int last)
|
||||||
{
|
{
|
||||||
|
ID resolving;
|
||||||
|
CONST_ID(resolving, "resolving");
|
||||||
while (*unresolved) {
|
while (*unresolved) {
|
||||||
char *testname = unresolved;
|
char *testname = unresolved;
|
||||||
char *unresolved_firstsep = rb_path_next(unresolved);
|
char *unresolved_firstsep = rb_path_next(unresolved);
|
||||||
@ -3112,7 +3114,7 @@ realpath_rec(long *prefixlenp, VALUE *resolvedp, char *unresolved, VALUE loopche
|
|||||||
rb_str_cat(testpath, testname, testnamelen);
|
rb_str_cat(testpath, testname, testnamelen);
|
||||||
checkval = rb_hash_aref(loopcheck, testpath);
|
checkval = rb_hash_aref(loopcheck, testpath);
|
||||||
if (!NIL_P(checkval)) {
|
if (!NIL_P(checkval)) {
|
||||||
if (checkval == ID2SYM(rb_intern("resolving"))) {
|
if (checkval == ID2SYM(resolving)) {
|
||||||
errno = ELOOP;
|
errno = ELOOP;
|
||||||
rb_sys_fail(RSTRING_PTR(testpath));
|
rb_sys_fail(RSTRING_PTR(testpath));
|
||||||
}
|
}
|
||||||
@ -3140,7 +3142,7 @@ realpath_rec(long *prefixlenp, VALUE *resolvedp, char *unresolved, VALUE loopche
|
|||||||
volatile VALUE link;
|
volatile VALUE link;
|
||||||
char *link_prefix, *link_names;
|
char *link_prefix, *link_names;
|
||||||
long link_prefixlen;
|
long link_prefixlen;
|
||||||
rb_hash_aset(loopcheck, testpath, ID2SYM(rb_intern("resolving")));
|
rb_hash_aset(loopcheck, testpath, ID2SYM(resolving));
|
||||||
link = rb_file_s_readlink(rb_cFile, testpath);
|
link = rb_file_s_readlink(rb_cFile, testpath);
|
||||||
link_prefix = RSTRING_PTR(link);
|
link_prefix = RSTRING_PTR(link);
|
||||||
link_names = skiproot(link_prefix);
|
link_names = skiproot(link_prefix);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user