MCPcopy Create free account
hub / github.com/coreboot/coreboot / parse_subpart_dir

Function parse_subpart_dir

util/cbfstool/ifwitool.c:798–845  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

796}
797
798static void parse_subpart_dir(struct buffer *subpart_dir_buf,
799 struct buffer *input_buf, const char *name)
800{
801 struct subpart_dir_header hdr;
802 size_t offset = 0;
803 uint8_t *data = buffer_get(input_buf);
804 size_t size = buffer_size(input_buf);
805
806 /* Read Subpart_Dir header. */
807 assert(size >= SUBPART_DIR_HEADER_SIZE);
808 offset = read_member(data, offset, sizeof(hdr.marker), &hdr.marker);
809 offset = read_member(data, offset, sizeof(hdr.num_entries),
810 &hdr.num_entries);
811 offset = read_member(data, offset, sizeof(hdr.header_version),
812 &hdr.header_version);
813 offset = read_member(data, offset, sizeof(hdr.entry_version),
814 &hdr.entry_version);
815 offset = read_member(data, offset, sizeof(hdr.header_length),
816 &hdr.header_length);
817 offset = read_member(data, offset, sizeof(hdr.checksum), &hdr.checksum);
818 memcpy(hdr.name, data + offset, sizeof(hdr.name));
819 offset += sizeof(hdr.name);
820
821 validate_subpart_dir_without_checksum((struct subpart_dir *)&hdr, name);
822
823 assert(size > subpart_dir_size(&hdr));
824 alloc_buffer(subpart_dir_buf, subpart_dir_size(&hdr), "Subpart Dir");
825 memcpy(buffer_get(subpart_dir_buf), &hdr, SUBPART_DIR_HEADER_SIZE);
826
827 /* Read Subpart Dir entries. */
828 struct subpart_dir *subpart_dir = buffer_get(subpart_dir_buf);
829 struct subpart_dir_entry *e = &subpart_dir->e[0];
830 uint32_t i;
831 for (i = 0; i < hdr.num_entries; i++) {
832 memcpy(e[i].name, data + offset, sizeof(e[i].name));
833 offset += sizeof(e[i].name);
834 offset = read_member(data, offset, sizeof(e[i].offset),
835 &e[i].offset);
836 offset = read_member(data, offset, sizeof(e[i].length),
837 &e[i].length);
838 offset = read_member(data, offset, sizeof(e[i].rsvd),
839 &e[i].rsvd);
840 }
841
842 validate_subpart_dir_with_checksum(subpart_dir, name);
843
844 print_subpart_dir(subpart_dir);
845}
846
847/* Parse the bpdt entries to compute the size of the BPDT */
848static size_t bpdt_size(void *data)

Callers 3

ifwi_dir_extractFunction · 0.85
ifwi_printFunction · 0.85
ifwi_dir_replaceFunction · 0.85

Calls 9

buffer_getFunction · 0.85
buffer_sizeFunction · 0.85
subpart_dir_sizeFunction · 0.85
alloc_bufferFunction · 0.85
print_subpart_dirFunction · 0.85
read_memberFunction · 0.70
memcpyFunction · 0.50

Tested by

no test coverage detected