Commit 1e8097a4 authored by Tomoyuki Sahara's avatar Tomoyuki Sahara

IO.sysopen raises an exception when open(2) fails. closes #6.

parent 93edd26b
......@@ -14,20 +14,7 @@ class File < IO
super(fd_or_path, mode)
else
@path = fd_or_path
perm = 0666 unless perm.is_a? Fixnum
fd = IO.sysopen(@path, mode, perm)
if fd < 0 && Object.const_defined?(:Errno)
begin
Errno.handle @path
rescue Errno::EMFILE
GC.run(true)
fd = IO.sysopen(@path, mode, perm)
Errno.handle if fd < 0
end
elsif fd < 0
raise NoFileError.new "no such file or directory"
end
super(fd, mode)
end
end
......
......@@ -396,6 +396,8 @@ mrb_io_s_sysopen(mrb_state *mrb, mrb_value klass)
flags = mrb_io_modestr_to_flags(mrb, mrb_string_value_cstr(mrb, &mode));
fd = io_open(mrb, path, flags, perm);
if (fd == -1)
mrb_sys_fail(mrb, mrb_str_to_cstr(mrb, path));
return mrb_fixnum_value(fd);
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment