Skip to content

Commit 3fd8110

Browse files
committed
Merge pull request #7770 from amatsuda/sysopen-nil-perm
2 parents 7a7a201 + 3c6ecbc commit 3fd8110

2 files changed

Lines changed: 15 additions & 2 deletions

File tree

‎mrbgems/mruby-io/src/io.c‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -851,9 +851,11 @@ io_s_sysopen(mrb_state *mrb, mrb_value klass)
851851
{
852852
mrb_value path = mrb_nil_value();
853853
mrb_value mode = mrb_nil_value();
854-
mrb_int perm = -1;
854+
mrb_value perm_v = mrb_nil_value();
855855

856-
mrb_get_args(mrb, "S|oi", &path, &mode, &perm);
856+
/* a nil permission is the default one, as an omitted one is */
857+
mrb_get_args(mrb, "S|oo", &path, &mode, &perm_v);
858+
mrb_int perm = mrb_nil_p(perm_v) ? -1 : mrb_as_int(mrb, perm_v);
857859
if (perm < 0) {
858860
perm = 0666;
859861
}

‎mrbgems/mruby-io/test/io.rb‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -475,6 +475,17 @@ def to_s
475475
end
476476
end
477477

478+
assert('IO.sysopen with a nil permission') do
479+
fd = IO.sysopen $mrbtest_io_rfname, "r", nil
480+
io = IO.new(fd)
481+
assert_equal $mrbtest_io_msg, io.read
482+
io.close
483+
484+
File.open($mrbtest_io_wfname, "w", nil) { |f| f.write "abc" }
485+
assert_equal "abc", File.read($mrbtest_io_wfname)
486+
assert_raise(TypeError) { IO.sysopen $mrbtest_io_rfname, "r", "0644" }
487+
end
488+
478489
assert('IO.sysopen, IO#sysread') do
479490
fd = IO.sysopen $mrbtest_io_rfname
480491
io = IO.new(fd)

0 commit comments

Comments
 (0)