diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-02-25 06:59:39 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-02-25 06:59:39 +0000 |
commit | f4726dcdaa421fa9bb2077b5de195acc5e3d4271 (patch) | |
tree | db0fe968faa6d2cf848bd281cefe4f231990056d | |
parent | ca3f71b8b57c5fc4f525d813bc07911cabe25130 (diff) | |
download | ruby-f4726dcdaa421fa9bb2077b5de195acc5e3d4271.tar.gz |
dir.c: same encoding to the pattern
* dir.c (push_pattern, push_glob): make globbed file names same
encoding to the given pattern.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49744 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | dir.c | 22 | ||||
-rw-r--r-- | test/ruby/test_dir_m17n.rb | 9 |
3 files changed, 29 insertions, 7 deletions
@@ -1,3 +1,8 @@ +Wed Feb 25 15:59:35 2015 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * dir.c (push_pattern, push_glob): make globbed file names same + encoding to the given pattern. + Wed Feb 25 15:27:16 2015 NARUSE, Yui <naruse@ruby-lang.org> * tool/merger.rb: support 2.1+ versioning scheme. @@ -1895,7 +1895,15 @@ rb_glob(const char *path, void (*func)(const char *, VALUE, void *), VALUE arg) static void push_pattern(const char *path, VALUE ary, void *enc) { - rb_ary_push(ary, rb_external_str_new_with_enc(path, strlen(path), enc)); +#ifdef __APPLE__ + VALUE name = rb_utf8_str_new_cstr(path); + rb_encoding *eenc = rb_default_internal_encoding(); + OBJ_TAINT(name); + name = rb_str_conv_enc(name, NULL, eenc ? eenc : enc); +#else + VALUE name = rb_external_str_new_with_enc(path, strlen(path), enc); +#endif + rb_ary_push(ary, name); } static int @@ -2000,19 +2008,19 @@ static int push_glob(VALUE ary, VALUE str, int flags) { struct glob_args args; -#ifdef __APPLE__ - rb_encoding *enc = rb_utf8_encoding(); - - str = rb_str_encode_ospath(str); -#else rb_encoding *enc = rb_enc_get(str); +#ifdef __APPLE__ + str = rb_str_encode_ospath(str); +#endif if (enc == rb_usascii_encoding()) enc = rb_filesystem_encoding(); if (enc == rb_usascii_encoding()) enc = rb_ascii8bit_encoding(); -#endif args.func = push_pattern; args.value = ary; args.enc = enc; +#ifdef __APPLE__ + enc = rb_utf8_encoding(); +#endif RB_GC_GUARD(str); return ruby_brace_glob0(RSTRING_PTR(str), flags | GLOB_VERBOSE, diff --git a/test/ruby/test_dir_m17n.rb b/test/ruby/test_dir_m17n.rb index 04186e54a7..f8fc1ef5e4 100644 --- a/test/ruby/test_dir_m17n.rb +++ b/test/ruby/test_dir_m17n.rb @@ -362,6 +362,15 @@ class TestDir_M17N < Test::Unit::TestCase end end + def test_glob_encoding + with_tmpdir do + %W"file_one.ext file_two.ext".each {|f| open(f, "w") {}} + a = "file_one*".force_encoding Encoding::IBM437 + b = "file_two*".force_encoding Encoding::EUC_JP + assert_equal([a, b].map(&:encoding), Dir[a, b].map(&:encoding)) + end + end + def test_entries_compose bug7267 = '[ruby-core:48745] [Bug #7267]' |