Sha256: 3cc4a823de6a547c5730f12ca2d44e173c569da429b3e6cbb1b10972c7fb7f83

Contents?: true

Size: 1.4 KB

Versions: 67

Compression:

Stored size: 1.4 KB

Contents

require 'fs/ext3/file_data'
require 'fs/ext3/directory_entry'

module Ext3
  class Directory
    ROOT_DIRECTORY = 2

    def initialize(sb, inodeNum = ROOT_DIRECTORY)
      raise "Ext3::Directory.initialize: Nil superblock"   if sb.nil?
      raise "Ext3::Directory.initialize: Nil inode number" if inodeNum.nil?
      @sb = sb; @inodeNum = inodeNum
      @inodeObj = sb.getInode(inodeNum)
      @data = FileData.new(@inodeObj, @sb).read
    end

    def globNames
      @ent_names ||= globEntries.keys.compact.sort
    end

    def findEntry(name, type = nil)
      return nil unless globEntries.key?(name)

      newEnt = @sb.isNewDirEnt?
      globEntries[name].each do |ent|
        ent.fileType = @sb.getInode(ent.inode).fileModeToFileType unless newEnt
        return ent if ent.fileType == type || type.nil?
      end
      nil
    end

    private

    def globEntries
      return @ents_by_name unless @ents_by_name.nil?

      @ents_by_name = {}; p = 0
      return @ents_by_name if @data.nil?
      newEnt = @sb.isNewDirEnt?
      loop do
        break if p > @data.length - 4
        break if @data[p, 4].nil?
        de = DirectoryEntry.new(@data[p..-1], newEnt)
        raise "Ext3::Directory.globEntries: DirectoryEntry length cannot be 0" if de.len == 0
        @ents_by_name[de.name] ||= []
        @ents_by_name[de.name] << de
        p += de.len
      end
      @ents_by_name
    end
  end # class
end # module

Version data entries

67 entries across 67 versions & 1 rubygems

Version Path
manageiq-smartstate-0.11.0 lib/fs/ext3/directory.rb
manageiq-smartstate-0.10.1 lib/fs/ext3/directory.rb
manageiq-smartstate-0.10.0 lib/fs/ext3/directory.rb
manageiq-smartstate-0.9.0 lib/fs/ext3/directory.rb
manageiq-smartstate-0.8.1 lib/fs/ext3/directory.rb
manageiq-smartstate-0.8.0 lib/fs/ext3/directory.rb
manageiq-smartstate-0.7.0 lib/fs/ext3/directory.rb
manageiq-smartstate-0.6.2 lib/fs/ext3/directory.rb
manageiq-smartstate-0.5.10 lib/fs/ext3/directory.rb
manageiq-smartstate-0.3.10 lib/fs/ext3/directory.rb
manageiq-smartstate-0.6.1 lib/fs/ext3/directory.rb
manageiq-smartstate-0.3.9 lib/fs/ext3/directory.rb
manageiq-smartstate-0.6.0 lib/fs/ext3/directory.rb
manageiq-smartstate-0.5.9 lib/fs/ext3/directory.rb
manageiq-smartstate-0.5.8 lib/fs/ext3/directory.rb
manageiq-smartstate-0.3.8 lib/fs/ext3/directory.rb
manageiq-smartstate-0.5.7 lib/fs/ext3/directory.rb
manageiq-smartstate-0.3.7 lib/fs/ext3/directory.rb
manageiq-smartstate-0.5.6 lib/fs/ext3/directory.rb
manageiq-smartstate-0.3.6 lib/fs/ext3/directory.rb