Class: ReiserFS::Directory

Inherits:
Object
  • Object
show all
Defined in:
lib/fs/ReiserFS/directory.rb

Constant Summary collapse

ROOT_DIR =
{'directory_id' => 1, 'object_id' => 2, 'offset' => 0, 'type' => 0}

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(sb, key = nil) ⇒ Directory

A directory is composed of 2 things: Key and BlockNum

Key is in the form of {doid,oid,offset,type}
BlockNum is what is used to actually instantiate the Block object

Note: BlockNum can always be computed from Key and the ROOT_DIR



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/fs/ReiserFS/directory.rb', line 19

def initialize(sb, key = nil)
  raise "Nil superblock" if sb.nil?
  @sb        = sb
  @key       = key.nil? ? ROOT_DIR : key
  @leaves    = @sb.getLeafNodes(@key)
  @dirEntry  = nil
  @dirItems  = nil

  raise "Key #{Utils.dumpKey(@key)} NOT found" if @leaves.nil?

  @leaves.each do |leaf|
    leaf.getItemHeaders.each do |iheader|
      @dirEntry = DirectoryEntry.new(leaf, iheader, @key)  if Utils.typeIsStat?(leaf.getItemType(iheader))
    end
  end
end

Instance Attribute Details

#keyObject

Returns the value of attribute key.



10
11
12
# File 'lib/fs/ReiserFS/directory.rb', line 10

def key
  @key
end

#sbObject

Returns the value of attribute sb.



10
11
12
# File 'lib/fs/ReiserFS/directory.rb', line 10

def sb
  @sb
end

Instance Method Details

#findEntry(name) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/fs/ReiserFS/directory.rb', line 46

def findEntry(name)
  initDirItems
  if @dirItems.key?(name)
    hash = @dirItems[name]
    unless hash.key?('dirEntry')
      hash['dirEntry'] = createDirectoryEntry(hash['key'])
      @dirItems[name] = hash
    end
    return hash['dirEntry']
  end

  nil
end

#findKey(name) ⇒ Object



36
37
38
39
40
41
42
43
44
# File 'lib/fs/ReiserFS/directory.rb', line 36

def findKey(name)
  initDirItems
  if @dirItems.key?(name)
    hash = @dirItems[name]
    return hash['key']
  end

  nil
end

#globNamesObject



60
61
62
63
64
65
66
67
68
# File 'lib/fs/ReiserFS/directory.rb', line 60

def globNames
  if @names.nil?
    initDirItems
    @names = @dirItems.keys
    @names.sort!
  end

  @names
end