about summary refs log tree commit diff stats
path: root/code
diff options
context:
space:
mode:
Diffstat (limited to 'code')
-rw-r--r--code/entry.rb29
-rw-r--r--code/extensions/basic.rb14
2 files changed, 21 insertions, 22 deletions
diff --git a/code/entry.rb b/code/entry.rb
index af1faa83..3b08c54a 100644
--- a/code/entry.rb
+++ b/code/entry.rb
@@ -38,6 +38,7 @@ class Directory::Entry
 		@readlink = ''
 		@symlink = false
 		@writable = false
+		@stat = nil
 		@infostring = ''
 		@mimetype = nil
 		@executable = false
@@ -50,6 +51,7 @@ class Directory::Entry
 	attr_reader(*%w{
 		basename mtime rights type path ext mimetype
 		infostring readlink basename size ctime name
+		stat
 	})
 
 	attr_accessor(:marked)
@@ -111,38 +113,39 @@ class Directory::Entry
 		@size = 0
 		@infostring = ''
 
-		@exists = File.exists?(@path)
+		@exists = File.exists?( @path )
 		if @exists
-			@writable = File.writable?(@path)
-			@symlink = File.symlink?(@path)
+			@stat = File.stat( @path )
+			@writable = @stat.writable?
+			@symlink = File.symlink?( @path )
 			if @symlink
-				@readlink = File.readlink(@path)
+				@readlink = File.readlink( @path )
 			end
-			if File.directory?(@path)
+			if @stat.directory?
 				@type = :dir
 				begin
-					sz = Dir.entries(@path).size - 2
+					sz = Dir.entries( @path ).size - 2
 					@size = sz
 				rescue
 					sz = "?"
 				end
 				@infostring << "#{sz}"
-			elsif File.socket?(@path)
+			elsif @stat.socket?
 				@type = :socket
 			else
 				@type = :file
 				@mimetype = MIMETYPES[@ext]
-				@size = File.size(@path)
-				if File.size?(@path)
+				@size = @stat.size
+				if @stat.size?
 					@infostring << " #{File.size(@path).bytes 2}"
 				else
 					@infostring << ""
 				end
 			end
-			@rights = File.modestr(@path)
-			@executable = File.executable?(@path)
-			@mtime = File.mtime(@path)
-			@ctime = File.ctime(@path)
+			@rights = @stat.modestr
+			@executable = @stat.executable?
+			@mtime = @stat.mtime
+			@ctime = @stat.ctime
 
 		else
 			if File.symlink?(@path)
diff --git a/code/extensions/basic.rb b/code/extensions/basic.rb
index f54c3d75..c07402d7 100644
--- a/code/extensions/basic.rb
+++ b/code/extensions/basic.rb
@@ -135,7 +135,7 @@ class Dir
 	end
 end
 
-class File
+class File::Stat
 	MODES_HASH = {
 		'0' => '---',
 		'1' => '--x',
@@ -146,20 +146,16 @@ class File
 		'6' => 'rw-',
 		'7' => 'rwx'
 	}
-	def self.modestr(f)
-		unless exists?(f)
-			return '----------'
-		end
-
-		if symlink?(f)
+	def modestr
+		if symlink?
 			result = 'l'
-		elsif directory?(f)
+		elsif directory?
 			result = 'd'
 		else
 			result = '-'
 		end
 
-		s = ("%o" % File.stat(f).mode)[-3..-1]
+		s = ("%o" % mode)[-3..-1]
 		for m in s.each_char
 			result << MODES_HASH[m]
 		end