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

ruby-changes:22948

From: naruse <ko1@a...>
Date: Tue, 13 Mar 2012 13:03:19 +0900 (JST)
Subject: [ruby-changes:22948] naruse:r34997 (trunk): * io.c (io_encoding_set): always warn if external encoding and internal

naruse	2012-03-13 13:03:06 +0900 (Tue, 13 Mar 2012)

  New Revision: 34997

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=34997

  Log:
    * io.c (io_encoding_set): always warn if external encoding and internal
      encoding are identical. [ruby-core:40727] [Bug #5568]

  Modified files:
    trunk/ChangeLog
    trunk/io.c
    trunk/test/ruby/test_io_m17n.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 34996)
+++ ChangeLog	(revision 34997)
@@ -1,3 +1,8 @@
+Tue Mar 13 12:37:53 2012  NARUSE, Yui  <naruse@r...>
+
+	* io.c (io_encoding_set): always warn if external encoding and internal
+	  encoding are identical. [ruby-core:40727] [Bug #5568]
+
 Tue Mar 13 12:37:03 2012  Nobuyoshi Nakada  <nobu@r...>
 
 	Bug #5350
Index: io.c
===================================================================
--- io.c	(revision 34996)
+++ io.c	(revision 34997)
@@ -8743,11 +8743,22 @@
 		enc = find_encoding(v2);
 	    if (enc == enc2) {
 		/* Special case - "-" => no transcoding */
+		VALUE tmp1 = rb_check_string_type(v1);
+		rb_warn("Ignoring internal encoding %s: it is identical to external encoding %s",
+			StringValueCStr(tmp), NIL_P(tmp1) ? rb_enc_name(enc) : StringValueCStr(tmp1));
 		enc2 = NULL;
 	    }
 	}
-	else
+	else {
 	    enc = find_encoding(v2);
+	    if (enc == enc2) {
+		/* Special case - "-" => no transcoding */
+		VALUE tmp1 = rb_check_string_type(v1);
+		rb_warn("Ignoring internal encoding %s: it is identical to external encoding %s",
+			rb_enc_name(enc), NIL_P(tmp1) ? rb_enc_name(enc) : StringValueCStr(tmp1));
+		enc2 = NULL;
+	    }
+	}
 	SET_UNIVERSAL_NEWLINE_DECORATOR_IF_ENC2(enc2, ecflags);
 	ecflags = rb_econv_prepare_options(opt, &ecopts, ecflags);
     }
Index: test/ruby/test_io_m17n.rb
===================================================================
--- test/ruby/test_io_m17n.rb	(revision 34996)
+++ test/ruby/test_io_m17n.rb	(revision 34997)
@@ -984,6 +984,32 @@
          end)
   end
 
+  def test_set_encoding_identical
+    bug5568 = '[ruby-core:40727]'
+    open(__FILE__, "r") do |f|
+      assert_warn(/Ignoring internal encoding euc-jp: it is identical to external encoding eucjp/, bug5568) {
+        f.set_encoding("eucjp:euc-jp")
+      }
+      assert_warn(/Ignoring internal encoding euc-jp: it is identical to external encoding eucjp/, bug5568) {
+        f.set_encoding("eucjp", "euc-jp")
+      }
+      assert_warn(/Ignoring internal encoding euc-jp: it is identical to external encoding EUC-JP/, bug5568) {
+        f.set_encoding(Encoding::EUC_JP, "euc-jp")
+      }
+      assert_warn(/Ignoring internal encoding EUC-JP: it is identical to external encoding eucjp/, bug5568) {
+        f.set_encoding("eucjp", Encoding::EUC_JP)
+      }
+      assert_warn(/Ignoring internal encoding EUC-JP: it is identical to external encoding EUC-JP/, bug5568) {
+        f.set_encoding(Encoding::EUC_JP, Encoding::EUC_JP)
+      }
+      nonstr = Object.new
+      def nonstr.to_str; "eucjp"; end
+      assert_warn(/Ignoring internal encoding eucjp: it is identical to external encoding eucjp/, bug5568) {
+        f.set_encoding(nonstr, nonstr)
+      }
+    end
+  end
+
   def test_set_encoding_undef
     pipe(proc do |w|
            w << "\ufffd"

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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