summaryrefslogtreecommitdiff
path: root/dir.c
diff options
context:
space:
mode:
Diffstat (limited to 'dir.c')
-rw-r--r--dir.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/dir.c b/dir.c
index 40d304cdf4..8383adc6f0 100644
--- a/dir.c
+++ b/dir.c
@@ -384,7 +384,7 @@ dir_initialize(int argc, VALUE *argv, VALUE dir)
{
struct dir_data *dp;
rb_encoding *fsenc;
- VALUE dirname, opt;
+ VALUE dirname, opt, orig;
static VALUE sym_enc;
if (!sym_enc) {
@@ -402,7 +402,9 @@ dir_initialize(int argc, VALUE *argv, VALUE dir)
}
GlobPathValue(dirname, FALSE);
+ orig = rb_str_dup_frozen(dirname);
dirname = rb_str_encode_ospath(dirname);
+ dirname = rb_str_dup_frozen(dirname);
TypedData_Get_Struct(dir, struct dir_data, &dir_data_type, dp);
if (dp->dir) closedir(dp->dir);
@@ -416,10 +418,10 @@ dir_initialize(int argc, VALUE *argv, VALUE dir)
dp->dir = opendir(RSTRING_PTR(dirname));
}
if (dp->dir == NULL) {
- rb_sys_fail_path(dirname);
+ rb_sys_fail_path(orig);
}
}
- dp->path = rb_str_dup_frozen(dirname);
+ dp->path = orig;
return dir;
}