summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--file.c6
2 files changed, 7 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 8643e99630..ee026af1ec 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
[ruby-core:28653]
diff --git a/file.c b/file.c
index 203e7c2029..24b843e904 100644
--- a/file.c
+++ b/file.c
@@ -3087,6 +3087,8 @@ rb_file_s_absolute_path(int argc, VALUE *argv)
static void
realpath_rec(long *prefixlenp, VALUE *resolvedp, char *unresolved, VALUE loopcheck, int strict, int last)
{
+ ID resolving;
+ CONST_ID(resolving, "resolving");
while (*unresolved) {
char *testname = 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);
checkval = rb_hash_aref(loopcheck, testpath);
if (!NIL_P(checkval)) {
- if (checkval == ID2SYM(rb_intern("resolving"))) {
+ if (checkval == ID2SYM(resolving)) {
errno = ELOOP;
rb_sys_fail(RSTRING_PTR(testpath));
}
@@ -3140,7 +3142,7 @@ realpath_rec(long *prefixlenp, VALUE *resolvedp, char *unresolved, VALUE loopche
volatile VALUE link;
char *link_prefix, *link_names;
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_prefix = RSTRING_PTR(link);
link_names = skiproot(link_prefix);