ruby-changes:14027
From: naruse <ko1@a...>
Date: Wed, 18 Nov 2009 12:38:36 +0900 (JST)
Subject: [ruby-changes:14027] Ruby:r25837 (trunk): * encoding.c (enc_set_default_encoding): reset filesytem
naruse 2009-11-18 12:38:20 +0900 (Wed, 18 Nov 2009) New Revision: 25837 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=25837 Log: * encoding.c (enc_set_default_encoding): reset filesytem encoding because on resetting default_external because Unix's filesystem encoding depends on default_external. * encoding.c (enc_set_filesystem_encoding): added. * ruby.c (process_options): don't call rb_filesystem_encoding because filesystem encoding is reset when default_external is reset. Modified files: trunk/ChangeLog trunk/encoding.c trunk/ruby.c trunk/test/ruby/test_encoding.rb Index: encoding.c =================================================================== --- encoding.c (revision 25836) +++ encoding.c (revision 25837) @@ -1116,7 +1116,7 @@ } static int -rb_filesystem_encindex(void) +enc_set_filesystem_encoding(void) { int idx; #if defined NO_LOCALE_CHARMAP @@ -1132,8 +1132,16 @@ idx = rb_enc_to_index(rb_default_external_encoding()); #endif - if (rb_enc_registered("filesystem") < 0) enc_alias_internal("filesystem", idx); + enc_alias_internal("filesystem", idx); + return idx; +} +static int +rb_filesystem_encindex(void) +{ + int idx = rb_enc_registered("filesystem"); + if (idx < 0) + idx = enc_set_filesystem_encoding(); return idx; } @@ -1148,6 +1156,8 @@ rb_encoding *enc; }; +static struct default_encoding default_external = {0}; + static int enc_set_default_encoding(struct default_encoding *def, VALUE encoding, const char *name) { @@ -1169,11 +1179,12 @@ enc_alias_internal(name, def->index); } + if (def == &default_external) + enc_set_filesystem_encoding(); + return overridden; } -static struct default_encoding default_external = {0}; - rb_encoding * rb_default_external_encoding(void) { Index: ChangeLog =================================================================== --- ChangeLog (revision 25836) +++ ChangeLog (revision 25837) @@ -1,3 +1,15 @@ +Wed Nov 18 12:33:42 2009 NARUSE, Yui <naruse@r...> + + * encoding.c (enc_set_default_encoding): reset filesytem + encoding because on resetting default_external because + Unix's filesystem encoding depends on default_external. + + * encoding.c (enc_set_filesystem_encoding): added. + + * ruby.c (process_options): don't call rb_filesystem_encoding + because filesystem encoding is reset when default_external + is reset. + Wed Nov 18 11:57:32 2009 TAKANO Mitsuhiro (takano32) <tak@n...> * math.c (math_gamma): fix incorrect comparison expression. Index: ruby.c =================================================================== --- ruby.c (revision 25836) +++ ruby.c (revision 25837) @@ -1324,7 +1324,6 @@ enc = lenc; } rb_enc_set_default_external(rb_enc_from_encoding(enc)); - (void)rb_filesystem_encoding(); if (opt->intern.enc.index >= 0) { enc = rb_enc_from_index(opt->intern.enc.index); rb_enc_set_default_internal(rb_enc_from_encoding(enc)); Index: test/ruby/test_encoding.rb =================================================================== --- test/ruby/test_encoding.rb (revision 25836) +++ test/ruby/test_encoding.rb (revision 25837) @@ -1,4 +1,5 @@ require 'test/unit' +require_relative 'envutil' class TestEncoding < Test::Unit::TestCase @@ -39,6 +40,15 @@ assert_raise(ArgumentError) { Encoding.find("foobarbazqux") } assert_nothing_raised{Encoding.find("locale")} assert_nothing_raised{Encoding.find("filesystem")} + + if /(?:ms|dar)win/ !~ RUBY_PLATFORM + # Unix's filesystem encoding is default_external + assert_ruby_status(%w[-EUTF-8:EUC-JP], <<-'EOS') + exit Encoding.find("filesystem") == Encoding::UTF_8 + Encoding.default_external = Encoding::EUC_JP + exit Encoding.find("filesystem") == Encoding::EUC_JP + EOS + end end def test_dummy_p -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/