summaryrefslogtreecommitdiff
path: root/dir.c
diff options
context:
space:
mode:
authornaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-02-25 12:25:55 +0000
committernaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-02-25 12:25:55 +0000
commit5e808b6ba38dbd974b617e80e2cf054eaaca604f (patch)
tree14d1fb78d676ba0073bc701136cda1d884a40292 /dir.c
parent1b21d03d76640db4c7c96709b78d973950385b1a (diff)
merge revision(s) 34794,34795:
* dir.c (dir_initialize): keep path in original encoding. * error.c (syserr_initialize): prefer the encoding of message over locale. [ruby-dev:45279][Bug #6071] * dir.c (dir_inspect), io.c (rb_io_inspect): keep encoding of path. [Bug #6072] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@34813 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
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 695ccc743e..0987e8ecc4 100644
--- a/dir.c
+++ b/dir.c
@@ -387,7 +387,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) {
@@ -405,7 +405,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);
@@ -419,10 +421,10 @@ dir_initialize(int argc, VALUE *argv, VALUE dir)
dp->dir = opendir(RSTRING_PTR(dirname));
}
if (dp->dir == NULL) {
- rb_sys_fail(RSTRING_PTR(dirname));
+ rb_sys_fail_path(orig);
}
}
- dp->path = rb_str_dup_frozen(dirname);
+ dp->path = orig;
return dir;
}