diff options
Diffstat (limited to 'string.c')
-rw-r--r-- | string.c | 11 |
1 files changed, 10 insertions, 1 deletions
@@ -5114,8 +5114,17 @@ rb_str_setter(VALUE val, ID id, VALUE *var) static VALUE rb_str_force_encoding(VALUE str, VALUE encname) { + const char *name; + int idx; + + if (NIL_P(encname)) { + idx = 0; + } + else if ((idx = rb_enc_find_index(name = StringValueCStr(encname))) < 0) { + rb_raise(rb_eArgError, "invalid encoding name - %s", name); + } str_modifiable(str); - rb_enc_associate(str, rb_enc_find(StringValueCStr(encname))); + rb_enc_associate_index(str, idx); return str; } |