summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--mrblib/file.rb18
1 files changed, 18 insertions, 0 deletions
diff --git a/mrblib/file.rb b/mrblib/file.rb
index 4087593a5..9a4333c64 100644
--- a/mrblib/file.rb
+++ b/mrblib/file.rb
@@ -12,9 +12,17 @@ class File < IO
if fd_or_path.kind_of? Fixnum
super(fd_or_path, mode)
else
+ if Object.const_defined? :Errno
+ eclass = [Errno::ENOENT, Errno::ENFILE]
+ else
+ eclass = FileError
+ end
+
@path = fd_or_path
begin
fd = IO.sysopen(@path, mode, perm)
+ rescue RuntimeError => e
+ raise FileError, "Could not open file (#{e})"
rescue Errno::EMFILE, Errno::ENFILE
GC.start
fd = IO.sysopen(@path, mode, perm)
@@ -119,6 +127,16 @@ class File < IO
end
end
+ def self.foreach(file)
+ if block_given?
+ self.open(file) do |f|
+ f.each {|l| yield l}
+ end
+ else
+ return self.new(file)
+ end
+ end
+
def self.directory?(file)
FileTest.directory?(file)
end