ruby-changes:6862
From: nobu <ko1@a...>
Date: Wed, 6 Aug 2008 05:34:30 +0900 (JST)
Subject: [ruby-changes:6862] Ruby:r18380 (trunk): * encoding.c (rb_to_encoding_index, rb_to_encoding): check if the name
nobu 2008-08-06 05:31:59 +0900 (Wed, 06 Aug 2008) New Revision: 18380 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=18380 Log: * encoding.c (rb_to_encoding_index, rb_to_encoding): check if the name is ascii compatible as well as Encoding.find. Modified files: trunk/ChangeLog trunk/encoding.c Index: encoding.c =================================================================== --- encoding.c (revision 18379) +++ encoding.c (revision 18380) @@ -121,24 +121,35 @@ else if (NIL_P(enc = rb_check_string_type(enc))) { return -1; } - else { - return rb_enc_find_index(StringValueCStr(enc)); + if (!rb_enc_asciicompat(rb_enc_get(enc))) { + return -1; } + return rb_enc_find_index(StringValueCStr(enc)); } -rb_encoding * -rb_to_encoding(VALUE enc) +static rb_encoding * +to_encoding(VALUE enc) { int idx; - idx = enc_check_encoding(enc); - if (idx >= 0) return RDATA(enc)->data; - if ((idx = rb_enc_find_index(StringValueCStr(enc))) < 0) { + StringValue(enc); + if (!rb_enc_asciicompat(rb_enc_get(enc))) { + rb_raise(rb_eArgError, "invalid name encoding (non ASCII)"); + } + idx = rb_enc_find_index(StringValueCStr(enc)); + if (idx < 0) { rb_raise(rb_eArgError, "unknown encoding name - %s", RSTRING_PTR(enc)); } return rb_enc_from_index(idx); } +rb_encoding * +rb_to_encoding(VALUE enc) +{ + if (enc_check_encoding(enc) >= 0) return RDATA(enc)->data; + return to_encoding(enc); +} + void rb_gc_mark_encodings(void) { @@ -838,17 +849,7 @@ static VALUE enc_find(VALUE klass, VALUE enc) { - int idx; - - StringValue(enc); - if (!rb_enc_asciicompat(rb_enc_get(enc))) { - rb_raise(rb_eArgError, "invalid name encoding (non ASCII)"); - } - idx = rb_enc_find_index(StringValueCStr(enc)); - if (idx < 0) { - rb_raise(rb_eArgError, "unknown encoding name - %s", RSTRING_PTR(enc)); - } - return rb_enc_from_encoding(rb_enc_from_index(idx)); + return rb_enc_from_encoding(to_encoding(enc)); } /* Index: ChangeLog =================================================================== --- ChangeLog (revision 18379) +++ ChangeLog (revision 18380) @@ -1,5 +1,8 @@ -Wed Aug 6 05:26:42 2008 Nobuyoshi Nakada <nobu@r...> +Wed Aug 6 05:31:54 2008 Nobuyoshi Nakada <nobu@r...> + * encoding.c (rb_to_encoding_index, rb_to_encoding): check if the name + is ascii compatible as well as Encoding.find. + * transcode.c (str_encode): no need to duplicate first. Wed Aug 6 05:08:30 2008 Nobuyoshi Nakada <nobu@r...> -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/