[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]