From 02f43f1bd92cd8eb016b44d98a2b86173c520211 Mon Sep 17 00:00:00 2001 From: akr Date: Mon, 18 Aug 2008 16:33:46 +0000 Subject: [PATCH] * io.c (rb_open_file): encoding in mode string was ignored if perm is specified. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18700 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ io.c | 6 ++++++ test/ruby/test_io_m17n.rb | 9 +++++++++ 3 files changed, 20 insertions(+) diff --git a/ChangeLog b/ChangeLog index 1b118814f9..2803321594 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Tue Aug 19 01:32:37 2008 Tanaka Akira + + * io.c (rb_open_file): encoding in mode string was ignored if perm is + specified. + Tue Aug 19 01:02:19 2008 Tanaka Akira * io.c (rb_open_file): don't access argv[-1] by diff --git a/io.c b/io.c index ad0cb3f7a5..30e407f5d8 100644 --- a/io.c +++ b/io.c @@ -4506,6 +4506,12 @@ rb_open_file(int argc, VALUE *argv, VALUE io) fmode = NIL_P(perm) ? 0666 : NUM2UINT(perm); rb_file_sysopen_internal(io, RSTRING_PTR(fname), flags, fmode); + + if (!FIXNUM_P(vmode)) { + rb_io_t *fptr; + GetOpenFile(io, fptr); + rb_io_mode_enc(fptr, StringValueCStr(vmode)); + } } else { mode = NIL_P(vmode) ? "r" : StringValueCStr(vmode); diff --git a/test/ruby/test_io_m17n.rb b/test/ruby/test_io_m17n.rb index fbf386548a..0a3c403c75 100644 --- a/test/ruby/test_io_m17n.rb +++ b/test/ruby/test_io_m17n.rb @@ -121,6 +121,15 @@ EOT } end + def test_open_w_enc_enc_perm + with_tmpdir { + open("tmp", "w:euc-jp:utf-8", 0600) {|f| + assert_equal(Encoding::EUC_JP, f.external_encoding) + assert_equal(Encoding::UTF_8, f.internal_encoding) + } + } + end + def test_stdin assert_equal(Encoding.default_external, STDIN.external_encoding) assert_equal(nil, STDIN.internal_encoding)