summaryrefslogtreecommitdiff
path: root/encoding.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-03-12 10:23:17 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-03-12 10:23:17 +0000
commit33ceea5cdbed60cdc2108b456c739808f3d58179 (patch)
tree8343184cd4b546b48946830ef4f1ba20331511a0 /encoding.c
parentc60602acbc0d003162ddd72b7e9e55454fbe640e (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.c19
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)
{