ruby-changes:7885
From: matz <ko1@a...>
Date: Thu, 18 Sep 2008 17:27:37 +0900 (JST)
Subject: [ruby-changes:7885] Ruby:r19406 (trunk): * transcode.c (enc_arg): revert last change. too early exception
matz 2008-09-18 17:27:17 +0900 (Thu, 18 Sep 2008) New Revision: 19406 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=19406 Log: * transcode.c (enc_arg): revert last change. too early exception raising. * transcode.c (enc_arg): need not to take pointer argument. Modified files: trunk/ChangeLog trunk/transcode.c Index: ChangeLog =================================================================== --- ChangeLog (revision 19405) +++ ChangeLog (revision 19406) @@ -1,3 +1,10 @@ +Thu Sep 18 17:18:35 2008 Yukihiro Matsumoto <matz@r...> + + * transcode.c (enc_arg): revert last change. too early exception + raising. + + * transcode.c (enc_arg): need not to take pointer argument. + Sun Jun 8 21:50:27 2008 Yusuke Endoh <mame@t...> * test/bigdecimal/test_bigdecimal.rb: add tests to achieve over 90% Index: transcode.c =================================================================== --- transcode.c (revision 19405) +++ transcode.c (revision 19406) @@ -2387,12 +2387,26 @@ } static int -enc_arg(volatile VALUE *arg, const char **name_p, rb_encoding **enc_p) +enc_arg(VALUE arg, const char **name_p, rb_encoding **enc_p) { - rb_encoding *enc = rb_to_encoding(*arg); - *name_p = rb_enc_name(enc); + rb_encoding *enc; + const char *n; + int encidx; + + if ((encidx = rb_to_encoding_index(arg)) < 0) { + enc = NULL; + encidx = 0; + n = StringValueCStr(arg); + } + else { + enc = rb_enc_from_index(encidx); + n = rb_enc_name(enc); + } + + *name_p = n; *enc_p = enc; - return rb_enc_to_index(enc); + + return encidx; } static int @@ -2404,7 +2418,7 @@ const char *sname, *dname; int sencidx, dencidx; - dencidx = enc_arg(arg1, &dname, &denc); + dencidx = enc_arg(*arg1, &dname, &denc); if (NIL_P(*arg2)) { sencidx = rb_enc_get_index(str); @@ -2412,7 +2426,7 @@ sname = rb_enc_name(senc); } else { - sencidx = enc_arg(arg2, &sname, &senc); + sencidx = enc_arg(*arg2, &sname, &senc); } *sname_p = sname; @@ -2656,7 +2670,7 @@ const char *arg_name, *result_name; rb_encoding *arg_enc, *result_enc; - enc_arg(&arg, &arg_name, &arg_enc); + enc_arg(arg, &arg_name, &arg_enc); result_name = rb_econv_asciicompat_encoding(arg_name); @@ -2867,9 +2881,9 @@ if (RARRAY_LEN(pair) != 2) rb_raise(rb_eArgError, "not a 2-element array in convpath"); snamev = rb_ary_entry(pair, 0); - enc_arg(&snamev, &sname, &senc); + enc_arg(snamev, &sname, &senc); dnamev = rb_ary_entry(pair, 1); - enc_arg(&dnamev, &dname, &denc); + enc_arg(dnamev, &dname, &denc); } else { sname = ""; -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/