binman: Add a function to obtain the image for an Entry

At present we have an 'image' property in the entry for this purpose, but
this is not necessary and seems error-prone in the presence of
inheritance. Add a function instead. The Entry_section class overrides
this with a special version, since top-level sections are in fact images,
since Image inherits Entry_section.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass 2019-07-20 12:23:46 -06:00
parent c6bd6e235a
commit c5ad04b721
4 changed files with 23 additions and 5 deletions

View File

@ -700,3 +700,11 @@ features to produce new behaviours.
data = self.ReadData(decomp)
self.ProcessContentsUpdate(data)
self.Detail('Loaded data size %x' % len(data))
def GetImage(self):
"""Get the image containing this entry
Returns:
Image object containing this entry
"""
return self.section.GetImage()

View File

@ -49,7 +49,7 @@ class Entry_fmap(Entry):
areas.append(fmap_util.FmapArea(pos or 0, entry.size or 0,
tools.FromUnicode(entry.name), 0))
entries = self.section.image.GetEntries()
entries = self.GetImage().GetEntries()
areas = []
for entry in entries.values():
_AddEntries(areas, entry)

View File

@ -45,8 +45,6 @@ class Entry_section(Entry):
def __init__(self, section, etype, node, test=False):
if not test:
Entry.__init__(self, section, etype, node)
if section:
self.image = section.image
self._entries = OrderedDict()
self._pad_byte = 0
self._sort = False
@ -374,7 +372,7 @@ class Entry_section(Entry):
Image size as an integer number of bytes, which may be None if the
image size is dynamic and its sections have not yet been packed
"""
return self.image.size
return self.GetImage().size
def FindEntryType(self, etype):
"""Find an entry type in the section
@ -468,3 +466,16 @@ class Entry_section(Entry):
for entry in self._entries.values():
entry.LoadData(decomp)
self.Detail('Loaded data')
def GetImage(self):
"""Get the image containing this section
Note that a top-level section is actually an Image, so this function may
return self.
Returns:
Image object containing this section
"""
if not self.section:
return self
return self.section.GetImage()

View File

@ -42,7 +42,6 @@ class Image(section.Entry_section):
we create a section manually.
"""
def __init__(self, name, node, test=False):
self.image = self
section.Entry_section.__init__(self, None, 'section', node, test)
self.name = 'main-section'
self.image_name = name