summaryrefslogtreecommitdiffhomepage
path: root/mrblib/file.rb
diff options
context:
space:
mode:
Diffstat (limited to 'mrblib/file.rb')
-rw-r--r--mrblib/file.rb20
1 files changed, 19 insertions, 1 deletions
diff --git a/mrblib/file.rb b/mrblib/file.rb
index 4087593a5..a4fcd3212 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)
@@ -56,7 +64,7 @@ class File < IO
def self.expand_path(path, default_dir = '.')
def concat_path(path, base_path)
- if path[0] == "/"
+ if path[0] == "/" || path[1] == ':' # Windows root!
expanded_path = path
elsif path[0] == "~"
if (path[1] == "/" || path[1] == nil)
@@ -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