def testMissingSymbol(self): image = Image('name', 'node', test=True) image._entries = {} with self.assertRaises(ValueError) as e: image.LookupSymbol('_binman_type_prop_pname', False, 'msg', 0) self.assertIn("msg: Entry 'type' not found in list ()", str(e.exception))
def _ReadImageDesc(binman_node, use_expanded): """Read the image descriptions from the /binman node This normally produces a single Image object called 'image'. But if multiple images are present, they will all be returned. Args: binman_node: Node object of the /binman node use_expanded: True if the FDT will be updated with the entry information Returns: OrderedDict of Image objects, each of which describes an image """ # For Image() # pylint: disable=E1102 images = OrderedDict() if 'multiple-images' in binman_node.props: for node in binman_node.subnodes: images[node.name] = Image(node.name, node, use_expanded=use_expanded) else: images['image'] = Image('image', binman_node, use_expanded=use_expanded) return images
def testInvalidFormat(self): image = Image('name', 'node', test=True) with self.assertRaises(ValueError) as e: image.LookupSymbol('_binman_something_prop_', False, 'msg', 0) self.assertIn( "msg: Symbol '_binman_something_prop_' has invalid format", str(e.exception))
def ExtractEntries(image_fname, output_fname, outdir, entry_paths, decomp=True, alt_format=None): """Extract the data from one or more entries and write it to files Args: image_fname: Image filename to process output_fname: Single output filename to use if extracting one file, None otherwise outdir: Output directory to use (for any number of files), else None entry_paths: List of entry paths to extract decomp: True to decompress the entry data Returns: List of EntryInfo records that were written """ image = Image.FromFile(image_fname) if alt_format == 'list': ShowAltFormats(image) return # Output an entry to a single file, as a special case if output_fname: if not entry_paths: raise ValueError('Must specify an entry path to write with -f') if len(entry_paths) != 1: raise ValueError( 'Must specify exactly one entry path to write with -f') entry = image.FindEntryPath(entry_paths[0]) data = entry.ReadData(decomp, alt_format) tools.write_file(output_fname, data) tout.notice("Wrote %#x bytes to file '%s'" % (len(data), output_fname)) return # Otherwise we will output to a path given by the entry path of each entry. # This means that entries will appear in subdirectories if they are part of # a sub-section. einfos = image.GetListEntries(entry_paths)[0] tout.notice('%d entries match and will be written' % len(einfos)) for einfo in einfos: entry = einfo.entry data = entry.ReadData(decomp, alt_format) path = entry.GetPath()[1:] fname = os.path.join(outdir, path) # If this entry has children, create a directory for it and put its # data in a file called 'root' in that directory if entry.GetEntries(): if fname and not os.path.exists(fname): os.makedirs(fname) fname = os.path.join(fname, 'root') tout.notice("Write entry '%s' size %x to '%s'" % (entry.GetPath(), len(data), fname)) tools.write_file(fname, data) return einfos