[Bug #20704] Win32: Fix chdir to non-ASCII path

On Windows, `chdir` in compilers' runtime libraries uses the active
code page, but command line arguments in ruby are always UTF-8, since
commit:33ea2646b98adb49ae2e1781753bf22d33729ac0.
This commit is contained in:
Nobuyoshi Nakada 2024-08-29 10:51:33 +09:00
Родитель 871ba3e9e3
Коммит d33e3d47b8
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 3582D74E1FEE4465
2 изменённых файлов: 15 добавлений и 2 удалений

2
ruby.c
Просмотреть файл

@ -559,6 +559,8 @@ translit_char_bin(char *p, int from, int to)
#endif
#ifdef _WIN32
# undef chdir
# define chdir rb_w32_uchdir
# define UTF8_PATH 1
#endif

Просмотреть файл

@ -237,7 +237,7 @@ class TestRubyOptions < Test::Unit::TestCase
def test_kanji
assert_in_out_err(%w(-KU), "p '\u3042'") do |r, e|
assert_equal("\"\u3042\"", r.join.force_encoding(Encoding::UTF_8))
assert_equal("\"\u3042\"", r.join('').force_encoding(Encoding::UTF_8))
end
line = '-eputs"\xc2\xa1".encoding'
env = {'RUBYOPT' => nil}
@ -362,9 +362,20 @@ class TestRubyOptions < Test::Unit::TestCase
d = Dir.tmpdir
assert_in_out_err(["-C", d, "-e", "puts Dir.pwd"]) do |r, e|
assert_file.identical?(r.join, d)
assert_file.identical?(r.join(''), d)
assert_equal([], e)
end
Dir.mktmpdir(d) do |base|
# "test" in Japanese and N'Ko
test = base + "/\u{30c6 30b9 30c8}_\u{7e1 7ca 7dd 7cc 7df 7cd 7eb}"
Dir.mkdir(test)
assert_in_out_err(["-C", base, "-C", File.basename(test), "-e", "puts Dir.pwd"]) do |r, e|
assert_file.identical?(r.join(''), test)
assert_equal([], e)
end
Dir.rmdir(test)
end
end
def test_yydebug