From 33ceea5cdbed60cdc2108b456c739808f3d58179 Mon Sep 17 00:00:00 2001 From: nobu Date: Mon, 12 Mar 2012 10:23:17 +0000 Subject: * 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 --- encoding.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'encoding.c') 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) { -- cgit v1.2.3