summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--ruby.c12
2 files changed, 13 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index a2fd07fb1d..062c81048b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Wed May 7 20:19:18 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ruby.c (process_options, ruby_set_argv): set encoding of rb_argv
+ after Init_prelude() because cannot load encoding extensions before
+ it.
+
Wed May 7 18:02:01 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
* string.c (sym_to_i): remove obsolete method. preparation for
diff --git a/ruby.c b/ruby.c
index f0c1c27804..a0636e3ca7 100644
--- a/ruby.c
+++ b/ruby.c
@@ -951,7 +951,7 @@ process_options(VALUE arg)
char **argv = argp->argv;
NODE *tree = 0;
VALUE parser;
- rb_encoding *enc;
+ rb_encoding *enc, *lenc;
const char *s;
int i = proc_options(argc, argv, opt);
int safe;
@@ -1059,6 +1059,10 @@ process_options(VALUE arg)
safe = rb_safe_level();
rb_set_safe_level_force(0);
ruby_init_gems(!(opt->disable & DISABLE_BIT(gems)));
+ lenc = rb_locale_encoding();
+ for (i = 0; i < RARRAY_LEN(rb_argv); i++) {
+ rb_enc_associate(RARRAY_PTR(rb_argv)[i], lenc);
+ }
parser = rb_parser_new();
if (opt->yydebug) rb_parser_set_yydebug(parser, Qtrue);
if (opt->ext.enc.name != 0) {
@@ -1072,7 +1076,7 @@ process_options(VALUE arg)
enc = rb_enc_from_index(opt->ext.enc.index);
}
else {
- enc = rb_locale_encoding();
+ enc = lenc;
}
rb_enc_set_default_external(rb_enc_from_encoding(enc));
@@ -1083,7 +1087,7 @@ process_options(VALUE arg)
eenc = rb_enc_from_index(opt->src.enc.index);
}
else {
- eenc = rb_locale_encoding();
+ eenc = lenc;
}
rb_enc_associate(opt->e_script, eenc);
require_libraries();
@@ -1460,7 +1464,6 @@ void
ruby_set_argv(int argc, char **argv)
{
int i;
- rb_encoding *enc = rb_locale_encoding();
VALUE av = rb_argv;
#if defined(USE_DLN_A_OUT)
@@ -1472,7 +1475,6 @@ ruby_set_argv(int argc, char **argv)
rb_ary_clear(av);
for (i = 0; i < argc; i++) {
VALUE arg = rb_tainted_str_new2(argv[i]);
- rb_enc_associate(arg, enc);
OBJ_FREEZE(arg);
rb_ary_push(av, arg);