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

This commit is contained in:
Tomoyuki Sahara
2013-11-16 05:12:22 +09:00
parent 93edd26b3e
commit 1e8097a4b8
2 changed files with 2 additions and 13 deletions
-13
View File
@@ -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
+2
View File
@@ -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);
}