diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-08-05 20:31:59 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-08-05 20:31:59 +0000 |
commit | c97a8423911be84bf4de58cd5f7c8cafdc795273 (patch) | |
tree | 56d447bc11026ba9b0ae0fba30a176d2595666cb | |
parent | 29732ed8f2cd897993e55435761a3952cca168eb (diff) | |
download | ruby-c97a8423911be84bf4de58cd5f7c8cafdc795273.tar.gz |
* encoding.c (rb_to_encoding_index, rb_to_encoding): check if the name
is ascii compatible as well as Encoding.find.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18380 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | encoding.c | 37 |
2 files changed, 23 insertions, 19 deletions
@@ -1,4 +1,7 @@ -Wed Aug 6 05:26:42 2008 Nobuyoshi Nakada <nobu@ruby-lang.org> +Wed Aug 6 05:31:54 2008 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * 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. diff --git a/encoding.c b/encoding.c index db6cd31ec9..e0f2bc9154 100644 --- a/encoding.c +++ b/encoding.c @@ -121,24 +121,35 @@ rb_to_encoding_index(VALUE enc) 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 @@ enc_list(VALUE klass) 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)); } /* |