diff options
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) { |