class Zip::FileSystem::File::Stat

:nodoc:all
:nodoc:all

def blksize

def blksize
  nil
end

def blocks

def blocks
  nil
end

def delegate_to_fs_file(*methods)

def delegate_to_fs_file(*methods)
  methods.each do |method|
    class_exec do
      define_method(method) do
        @zip_fs_file.__send__(method, @entry_name)
      end
    end
  end
end

def dev

def dev
  0
end

def find_entry

def find_entry
  @zip_fs_file.find_entry(@entry_name)
end

def ftype

def ftype
  if file?
    'file'
  elsif directory?
    'directory'
  else
    raise StandardError, 'Unknown file type'
  end
end

def gid

def gid
  e = find_entry
  if e.extra.member? :iunix
    e.extra[:iunix].gid || 0
  else
    0
  end
end

def initialize(zip_fs_file, entry_name)

def initialize(zip_fs_file, entry_name)
  @zip_fs_file = zip_fs_file
  @entry_name = entry_name
end

def ino

def ino
  0
end

def kind_of?(type)

def kind_of?(type)
  super || type == ::File::Stat
end

def mode

def mode
  e = find_entry
  if e.fstype == FSTYPE_UNIX
    e.external_file_attributes >> 16
  else
    0o100_666 # Equivalent to -rw-rw-rw-.
  end
end

def nlink

def nlink
  1
end

def rdev

def rdev
  0
end

def rdev_major

def rdev_major
  0
end

def rdev_minor

def rdev_minor
  0
end

def uid

def uid
  e = find_entry
  if e.extra.member? :iunix
    e.extra[:iunix].uid || 0
  else
    0
  end
end