summaryrefslogtreecommitdiff
path: root/ext/stringio
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2022-05-30 13:46:31 +0900
committergit <svn-admin@ruby-lang.org>2022-05-30 14:48:44 +0900
commitd3e986d9ab9a880b58a0b4fc68dadc2b10f4cf12 (patch)
treeb9a08fa1bde8ee096670b45652df94c0aa01d519 /ext/stringio
parent4cc880e994d18fcf4a82974acbdcfa5f7431a306 (diff)
downloadruby-d3e986d9ab9a880b58a0b4fc68dadc2b10f4cf12.tar.gz
[ruby/stringio] Accept external and internal encodings pair
Fix https://github.com/ruby/stringio/pull/16 https://github.com/ruby/stringio/commit/c8a69e80d2
Diffstat (limited to 'ext/stringio')
-rw-r--r--ext/stringio/stringio.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/ext/stringio/stringio.c b/ext/stringio/stringio.c
index 13c8af9216..13f9c28dd1 100644
--- a/ext/stringio/stringio.c
+++ b/ext/stringio/stringio.c
@@ -1719,7 +1719,14 @@ strio_set_encoding(int argc, VALUE *argv, VALUE self)
enc = rb_default_external_encoding();
}
else {
- enc = rb_to_encoding(ext_enc);
+ enc = rb_find_encoding(ext_enc);
+ if (!enc) {
+ struct rb_io_enc_t convconfig;
+ int oflags, fmode;
+ VALUE vmode = rb_str_append(rb_str_new_cstr("r:"), ext_enc);
+ rb_io_extract_modeenc(&vmode, 0, Qnil, &oflags, &fmode, &convconfig);
+ enc = convconfig.enc2;
+ }
}
ptr->enc = enc;
if (WRITABLE(self)) {