aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-08-18 16:33:46 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-08-18 16:33:46 +0000
commit02f43f1bd92cd8eb016b44d98a2b86173c520211 (patch)
treec31859931992245ab5b0e75de06d8110a866b373
parent20d2ecafa30f84e13242a2cf221d24bb8be5e7ed (diff)
downloadruby-02f43f1bd92cd8eb016b44d98a2b86173c520211.tar.gz
* 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
-rw-r--r--ChangeLog5
-rw-r--r--io.c6
-rw-r--r--test/ruby/test_io_m17n.rb9
3 files changed, 20 insertions, 0 deletions
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 <akr@fsij.org>
+
+ * io.c (rb_open_file): encoding in mode string was ignored if perm is
+ specified.
+
Tue Aug 19 01:02:19 2008 Tanaka Akira <akr@fsij.org>
* 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)