mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
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
This commit is contained in:
parent
ca3f71b8b5
commit
f4726dcdaa
3 changed files with 29 additions and 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>
|
Wed Feb 25 15:27:16 2015 NARUSE, Yui <naruse@ruby-lang.org>
|
||||||
|
|
||||||
* tool/merger.rb: support 2.1+ versioning scheme.
|
* tool/merger.rb: support 2.1+ versioning scheme.
|
||||||
|
|
22
dir.c
22
dir.c
|
@ -1895,7 +1895,15 @@ rb_glob(const char *path, void (*func)(const char *, VALUE, void *), VALUE arg)
|
||||||
static void
|
static void
|
||||||
push_pattern(const char *path, VALUE ary, void *enc)
|
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
|
static int
|
||||||
|
@ -2000,19 +2008,19 @@ static int
|
||||||
push_glob(VALUE ary, VALUE str, int flags)
|
push_glob(VALUE ary, VALUE str, int flags)
|
||||||
{
|
{
|
||||||
struct glob_args args;
|
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);
|
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_filesystem_encoding();
|
||||||
if (enc == rb_usascii_encoding()) enc = rb_ascii8bit_encoding();
|
if (enc == rb_usascii_encoding()) enc = rb_ascii8bit_encoding();
|
||||||
#endif
|
|
||||||
args.func = push_pattern;
|
args.func = push_pattern;
|
||||||
args.value = ary;
|
args.value = ary;
|
||||||
args.enc = enc;
|
args.enc = enc;
|
||||||
|
#ifdef __APPLE__
|
||||||
|
enc = rb_utf8_encoding();
|
||||||
|
#endif
|
||||||
|
|
||||||
RB_GC_GUARD(str);
|
RB_GC_GUARD(str);
|
||||||
return ruby_brace_glob0(RSTRING_PTR(str), flags | GLOB_VERBOSE,
|
return ruby_brace_glob0(RSTRING_PTR(str), flags | GLOB_VERBOSE,
|
||||||
|
|
|
@ -362,6 +362,15 @@ class TestDir_M17N < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
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
|
def test_entries_compose
|
||||||
bug7267 = '[ruby-core:48745] [Bug #7267]'
|
bug7267 = '[ruby-core:48745] [Bug #7267]'
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue