diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-03-12 10:23:17 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-03-12 10:23:17 +0000 |
commit | 33ceea5cdbed60cdc2108b456c739808f3d58179 (patch) | |
tree | 8343184cd4b546b48946830ef4f1ba20331511a0 /encoding.c | |
parent | c60602acbc0d003162ddd72b7e9e55454fbe640e (diff) |
* encoding.c (rb_find_encoding): new function find encoding from
arbitrary object as a pointer to rb_encoding, and return NULL if
not found.
* io.c (io_encoding_set): just warn unsupported encodings, but not
exception. [ruby-core:40726] [Bug #5567]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34986 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'encoding.c')
-rw-r--r-- | encoding.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/encoding.c b/encoding.c index dd20477906..1d82d4d3c4 100644 --- a/encoding.c +++ b/encoding.c @@ -161,7 +161,7 @@ rb_to_encoding_index(VALUE enc) /* Returns encoding index or UNSPECIFIED_ENCODING */ static int -str_to_encindex(VALUE enc) +str_find_encindex(VALUE enc) { int idx; @@ -170,6 +170,13 @@ str_to_encindex(VALUE enc) rb_raise(rb_eArgError, "invalid name encoding (non ASCII)"); } idx = rb_enc_find_index(StringValueCStr(enc)); + return idx; +} + +static int +str_to_encindex(VALUE enc) +{ + int idx = str_find_encindex(enc); if (idx < 0) { rb_raise(rb_eArgError, "unknown encoding name - %s", RSTRING_PTR(enc)); } @@ -189,6 +196,16 @@ rb_to_encoding(VALUE enc) return str_to_encoding(enc); } +rb_encoding * +rb_find_encoding(VALUE enc) +{ + int idx; + if (enc_check_encoding(enc) >= 0) return RDATA(enc)->data; + idx = str_find_encindex(enc); + if (idx < 0) return NULL; + return rb_enc_from_index(idx); +} + void rb_gc_mark_encodings(void) { |