diff options
author | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-12-29 02:01:02 +0000 |
---|---|---|
committer | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-12-29 02:01:02 +0000 |
commit | 1ebed6c6140a1c3fe0e6b157910cc1d2d1bd49bc (patch) | |
tree | f6ba6e1f4786c0e790a7c3ac0afa091a5d4d33a8 /file.c | |
parent | 1487d9743b6e5082676c194d023b6dabaa53085c (diff) |
* file.c (rb_get_path): move encoding conversion of file path
from rb_scan_open_args.
* io.c (rb_scan_open_args): ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21146 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'file.c')
-rw-r--r-- | file.c | 22 |
1 files changed, 21 insertions, 1 deletions
@@ -107,7 +107,6 @@ rb_get_path_check(VALUE obj, int check) tmp = rb_check_string_type(obj); if (!NIL_P(tmp)) goto exit; - CONST_ID(to_path, "to_path"); if (rb_respond_to(obj, to_path)) { tmp = rb_funcall(obj, to_path, 0, 0); @@ -120,6 +119,27 @@ rb_get_path_check(VALUE obj, int check) if (check && obj != tmp) { rb_check_safe_obj(tmp); } + +#if defined _WIN32 || defined __APPLE__ + { + static rb_encoding *fs_encoding; + rb_encoding *fname_encoding = rb_enc_get(tmp); + if (!fs_encoding) + fs_encoding = rb_filesystem_encoding(); + if (rb_usascii_encoding() != fname_encoding + && rb_ascii8bit_encoding() != fname_encoding +#if defined __APPLE__ + && rb_utf8_encoding() != fname_encoding +#endif + && fs_encoding != fname_encoding) { + static VALUE fs_enc; + if (!fs_enc) + fs_enc = rb_enc_from_encoding(fs_encoding); + tmp = rb_str_encode(tmp, fs_enc, 0, Qnil); + } + } +#endif + return rb_str_new4(tmp); } |