"""
# Use True here so that we get an uncompressed section to work from,
# although compressed sections are currently not supported
- data = self.section.ReadData(True)
- tout.Info('%s: Reading data from offset %#x-%#x, size %#x (avail %#x)' %
- (self.GetPath(), self.offset, self.offset + self.size,
- self.size, len(data)))
- return data[self.offset:self.offset + self.size]
+ data = self.section.ReadChildData(self, decomp)
+ return data
def LoadData(self, decomp=True):
data = self.ReadData(decomp)
def GetDefaultFilename(self):
return self._filename
-
- def ReadData(self, decomp=True):
- indata = Entry.ReadData(self, decomp)
- if decomp:
- data = tools.Decompress(indata, self.compress)
- if self.uncomp_size:
- tout.Info("%s: Decompressing data size %#x with algo '%s' to data size %#x" %
- (self.GetPath(), len(indata), self.compress,
- len(data)))
- else:
- data = indata
- return data
def GetEntries(self):
return self._cbfs_entries
+
+ def ReadData(self, decomp=True):
+ data = Entry.ReadData(self, True)
+ return data
+
+ def ReadChildData(self, child, decomp=True):
+ if not self.reader:
+ data = Entry.ReadData(self, True)
+ self.reader = cbfs_util.CbfsReader(data)
+ reader = self.reader
+ cfile = reader.files.get(child.name)
+ return cfile.data if decomp else cfile.orig_data
from entry import Entry
import fdt_util
import tools
+import tout
class Entry_section(Entry):
they appear in the device tree
"""
return self._sort
+
+ def ReadData(self, decomp=True):
+ tout.Info("ReadData path='%s'" % self.GetPath())
+ parent_data = self.section.ReadData(True)
+ tout.Info('%s: Reading data from offset %#x-%#x, size %#x' %
+ (self.GetPath(), self.offset, self.offset + self.size,
+ self.size))
+ data = parent_data[self.offset:self.offset + self.size]
+ return data
+
+ def ReadChildData(self, child, decomp=True):
+ """Read the data for a particular child entry
+
+ Args:
+ child: Child entry to read data for
+ decomp: True to return uncompressed data, False to leave the data
+ compressed if it is compressed
+
+ Returns:
+ Data contents of entry
+ """
+ parent_data = self.ReadData(True)
+ data = parent_data[child.offset:child.offset + child.size]
+ if decomp:
+ indata = data
+ data = tools.Decompress(indata, child.compress)
+ if child.uncomp_size:
+ tout.Info("%s: Decompressing data size %#x with algo '%s' to data size %#x" %
+ (child.GetPath(), len(indata), child.compress,
+ len(data)))
+ return data