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/