ruby.c: transcode program names
* ruby.c (process_options, ruby_script): transcode script name and program name to locale encoding as well as argv. [ruby-dev:48752] [Bug #10555] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48652 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
b4c3c3171f
commit
1ce81d6f8b
@ -1,4 +1,8 @@
|
|||||||
Sun Nov 30 00:02:22 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
Sun Nov 30 00:02:52 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* ruby.c (process_options, ruby_script): transcode script name and
|
||||||
|
program name to locale encoding as well as argv.
|
||||||
|
[ruby-dev:48752] [Bug #10555]
|
||||||
|
|
||||||
* ruby.c (translit_char_bin): should not use code page dependent
|
* ruby.c (translit_char_bin): should not use code page dependent
|
||||||
CharNext on UTF-8 string. [ruby-dev:48752] [Bug #10555]
|
CharNext on UTF-8 string. [ruby-dev:48752] [Bug #10555]
|
||||||
|
20
ruby.c
20
ruby.c
@ -346,6 +346,16 @@ translit_char_bin(char *p, int from, int to)
|
|||||||
# define UTF8_PATH 0
|
# define UTF8_PATH 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if UTF8_PATH
|
||||||
|
static VALUE
|
||||||
|
str_conv_enc(VALUE str, rb_encoding *from, rb_encoding *to)
|
||||||
|
{
|
||||||
|
return rb_str_conv_enc_opts(str, from, to,
|
||||||
|
ECONV_UNDEF_REPLACE|ECONV_INVALID_REPLACE,
|
||||||
|
Qnil);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void ruby_init_loadpath_safe(int safe_level);
|
void ruby_init_loadpath_safe(int safe_level);
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1404,6 +1414,10 @@ process_options(int argc, char **argv, struct cmdline_options *opt)
|
|||||||
rb_define_module("Gem");
|
rb_define_module("Gem");
|
||||||
}
|
}
|
||||||
ruby_init_prelude();
|
ruby_init_prelude();
|
||||||
|
#if UTF8_PATH
|
||||||
|
opt->script_name = str_conv_enc(opt->script_name, rb_utf8_encoding(), lenc);
|
||||||
|
opt->script = RSTRING_PTR(opt->script_name);
|
||||||
|
#endif
|
||||||
ruby_set_argv(argc, argv);
|
ruby_set_argv(argc, argv);
|
||||||
process_sflag(&opt->sflag);
|
process_sflag(&opt->sflag);
|
||||||
|
|
||||||
@ -1819,9 +1833,7 @@ external_str_new_cstr(const char *p)
|
|||||||
{
|
{
|
||||||
#if UTF8_PATH
|
#if UTF8_PATH
|
||||||
VALUE str = rb_utf8_str_new_cstr(p);
|
VALUE str = rb_utf8_str_new_cstr(p);
|
||||||
return rb_str_conv_enc_opts(str, NULL, rb_default_external_encoding(),
|
return str_conv_enc(str, NULL, rb_default_external_encoding());
|
||||||
ECONV_UNDEF_REPLACE|ECONV_INVALID_REPLACE,
|
|
||||||
Qnil);
|
|
||||||
#else
|
#else
|
||||||
return rb_external_str_new_cstr(p);
|
return rb_external_str_new_cstr(p);
|
||||||
#endif
|
#endif
|
||||||
@ -1836,7 +1848,7 @@ void
|
|||||||
ruby_script(const char *name)
|
ruby_script(const char *name)
|
||||||
{
|
{
|
||||||
if (name) {
|
if (name) {
|
||||||
rb_orig_progname = rb_progname = rb_external_str_new(name, strlen(name));
|
rb_orig_progname = rb_progname = external_str_new_cstr(name);
|
||||||
rb_vm_set_progname(rb_progname);
|
rb_vm_set_progname(rb_progname);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -705,6 +705,17 @@ class TestRubyOptions < Test::Unit::TestCase
|
|||||||
bug10555, encoding: "locale")
|
bug10555, encoding: "locale")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_command_line_progname_nonascii
|
||||||
|
bug10555 = '[ruby-dev:48752] [Bug #10555]'
|
||||||
|
name = "\u{3042}.rb"
|
||||||
|
expected = name.encode("locale") rescue "?.rb"
|
||||||
|
with_tmpchdir do |dir|
|
||||||
|
open(name, "w") {|f| f.puts "puts File.basename($0)"}
|
||||||
|
assert_in_out_err([name], "", [expected], [],
|
||||||
|
bug10555, encoding: "locale")
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_script_is_directory
|
def test_script_is_directory
|
||||||
|
Loading…
x
Reference in New Issue
Block a user