From 4505ae8f04fcd8d2041cbd4cd89e70fcc4641b55 Mon Sep 17 00:00:00 2001 From: matz Date: Thu, 18 Sep 2008 08:27:17 +0000 Subject: * transcode.c (enc_arg): revert last change. too early exception raising. * transcode.c (enc_arg): need not to take pointer argument. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@19406 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- transcode.c | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) (limited to 'transcode.c') diff --git a/transcode.c b/transcode.c index f29e56411..c3c08d309 100644 --- a/transcode.c +++ b/transcode.c @@ -2387,12 +2387,26 @@ rb_econv_open_opts(const char *source_encoding, const char *destination_encoding } 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 @@ str_transcode_enc_args(VALUE str, volatile VALUE *arg1, volatile VALUE *arg2, 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 @@ str_transcode_enc_args(VALUE str, volatile VALUE *arg1, volatile VALUE *arg2, 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 @@ econv_s_asciicompat_encoding(VALUE klass, VALUE arg) 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 @@ rb_econv_init_by_convpath(VALUE self, VALUE convpath, 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 = ""; -- cgit