ruby-changes:8290
From: matz <ko1@a...>
Date: Fri, 17 Oct 2008 18:15:21 +0900 (JST)
Subject: [ruby-changes:8290] Ruby:r19818 (trunk): * transcode.c (str_transcode0): String#encode without argument now
matz 2008-10-17 18:13:04 +0900 (Fri, 17 Oct 2008) New Revision: 19818 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=19818 Log: * transcode.c (str_transcode0): String#encode without argument now behave as if :undef => :replace, :invalid => :replace specified. * transcode.c (rb_econv_prepare_opts): should preserve options in any case. Modified files: trunk/ChangeLog trunk/transcode.c Index: ChangeLog =================================================================== --- ChangeLog (revision 19817) +++ ChangeLog (revision 19818) @@ -3,6 +3,14 @@ * test/rubygems/gemutilities.rb (RubyGemTestCase#build_rake_in): get rid of interference with other tests. +Fri Oct 17 18:06:39 2008 Yukihiro Matsumoto <matz@r...> + + * transcode.c (str_transcode0): String#encode without argument now + behave as if :undef => :replace, :invalid => :replace specified. + + * transcode.c (rb_econv_prepare_opts): should preserve options in + any case. + Fri Oct 17 11:48:18 2008 Shugo Maeda <shugo@r...> * ext/socket/socket.c (init_sock): sockets should be binmode. Index: transcode.c =================================================================== --- transcode.c (revision 19817) +++ transcode.c (revision 19818) @@ -2307,28 +2307,27 @@ { int ecflags; VALUE newhash = Qnil; + VALUE v; + if (NIL_P(opthash)) { *opts = Qnil; return 0; } ecflags = econv_opts(opthash); + v = rb_hash_aref(opthash, sym_replace); + if (!NIL_P(v)) { + StringValue(v); + if (rb_enc_str_coderange(v) == ENC_CODERANGE_BROKEN) { + VALUE dumped = rb_str_dump(v); + rb_raise(rb_eArgError, "replacement string is broken: %s as %s", + StringValueCStr(dumped), + rb_enc_name(rb_enc_get(v))); + } + v = rb_str_new_frozen(v); + newhash = rb_hash_new(); + rb_hash_aset(newhash, sym_replace, v); + } - if ((ecflags & ECONV_INVALID_MASK) == ECONV_INVALID_REPLACE || - (ecflags & ECONV_UNDEF_MASK) == ECONV_UNDEF_REPLACE) { - VALUE v = rb_hash_aref(opthash, sym_replace); - if (!NIL_P(v)) { - StringValue(v); - if (rb_enc_str_coderange(v) == ENC_CODERANGE_BROKEN) { - VALUE dumped = rb_str_dump(v); - rb_raise(rb_eArgError, "replacement string is broken: %s as %s", - StringValueCStr(dumped), - rb_enc_name(rb_enc_get(v))); - } - v = rb_str_new_frozen(v); - newhash = rb_hash_new(); - rb_hash_aset(newhash, sym_replace, v); - } - } if (!NIL_P(newhash)) rb_hash_freeze(newhash); *opts = newhash; @@ -2444,6 +2443,7 @@ if (NIL_P(arg1)) { return -1; } + ecflags |= ECONV_INVALID_REPLACE | ECONV_UNDEF_REPLACE; } else { arg1 = argv[0]; -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/