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

Function create_subpart

util/cbfstool/ifwitool.c:1380–1419  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1378}
1379
1380static void create_subpart(struct buffer *dst, struct buffer *info[],
1381 size_t count, const char *name)
1382{
1383 struct buffer subpart_dir_buff;
1384 size_t size = SUBPART_DIR_HEADER_SIZE + count * SUBPART_DIR_ENTRY_SIZE;
1385
1386 alloc_buffer(&subpart_dir_buff, size, "subpart-dir");
1387
1388 struct subpart_dir_header *h = buffer_get(&subpart_dir_buff);
1389 struct subpart_dir_entry *e = (struct subpart_dir_entry *)(h + 1);
1390
1391 init_subpart_dir_header(h, count, name);
1392
1393 size_t curr_offset = size;
1394 size_t i;
1395
1396 for (i = 0; i < count; i++) {
1397 curr_offset = init_subpart_dir_entry(&e[i], info[i],
1398 curr_offset);
1399 }
1400
1401 alloc_buffer(dst, curr_offset, name);
1402 uint8_t *data = buffer_get(dst);
1403
1404 for (i = 0; i < count; i++) {
1405 memcpy(data + e[i].offset, buffer_get(info[i]),
1406 buffer_size(info[i]));
1407 }
1408
1409 h->checksum = calc_checksum(buffer_get(&subpart_dir_buff));
1410
1411 struct subpart_dir *dir = buffer_get(&subpart_dir_buff);
1412
1413 print_subpart_dir(dir);
1414
1415 subpart_dir_fixup_write_buffer(&subpart_dir_buff);
1416 memcpy(data, dir, buffer_size(&subpart_dir_buff));
1417
1418 buffer_delete(&subpart_dir_buff);
1419}
1420
1421static enum ifwi_ret ibbp_dir_add(int type)
1422{

Callers 1

ibbp_dir_addFunction · 0.85

Calls 10

alloc_bufferFunction · 0.85
buffer_getFunction · 0.85
init_subpart_dir_headerFunction · 0.85
init_subpart_dir_entryFunction · 0.85
buffer_sizeFunction · 0.85
print_subpart_dirFunction · 0.85
buffer_deleteFunction · 0.85
calc_checksumFunction · 0.70
memcpyFunction · 0.50

Tested by

no test coverage detected