summaryrefslogtreecommitdiff
path: root/encoding.c
diff options
context:
space:
mode:
authornaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-08-02 14:27:56 +0000
committernaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-08-02 14:27:56 +0000
commit48bc63fa7aadb25f3c0fdaad9c116e9171a8cfad (patch)
treee5a5d8dba2f7aaea6584720bf3b87a850b891e25 /encoding.c
parent027a15e9582d62fbd2df7efcdd2e8475be758583 (diff)
Fix r32811: add UNSPECIFIED_ENCODING case.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32816 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'encoding.c')
-rw-r--r--encoding.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/encoding.c b/encoding.c
index fca7e1fea6..8e80e8ce66 100644
--- a/encoding.c
+++ b/encoding.c
@@ -159,6 +159,7 @@ rb_to_encoding_index(VALUE enc)
return rb_enc_find_index(StringValueCStr(enc));
}
+/* Returns encoding index or UNSPECIFIED_ENCODING */
static int
str_to_encindex(VALUE enc)
{
@@ -596,6 +597,7 @@ enc_autoload(rb_encoding *enc)
return i;
}
+/* Return encoding index or UNSPECIFIED_ENCODING from encoding name */
int
rb_enc_find_index(const char *name)
{
@@ -1051,9 +1053,12 @@ enc_list(VALUE klass)
static VALUE
enc_find(VALUE klass, VALUE enc)
{
+ int idx;
if (!SPECIAL_CONST_P(enc) && BUILTIN_TYPE(enc) == T_DATA && is_data_encoding(enc))
return enc;
- return rb_enc_from_encoding_index(str_to_encindex(enc));
+ idx = str_to_encindex(enc);
+ if (idx == UNSPECIFIED_ENCODING) return Qnil;
+ return rb_enc_from_encoding_index(idx);
}
/*