diff --git a/util/cbfstool/cbfs_image.c b/util/cbfstool/cbfs_image.c index 84f4be60bf..8297cf15bc 100644 --- a/util/cbfstool/cbfs_image.c +++ b/util/cbfstool/cbfs_image.c @@ -533,12 +533,13 @@ static int cbfs_add_entry_at(struct cbfs_image *image, int cbfs_add_entry(struct cbfs_image *image, struct buffer *buffer, const char *name, uint32_t type, uint32_t content_offset, - uint32_t header_size) + void *header, uint32_t header_size) { assert(image); assert(buffer); assert(buffer->data); assert(name); + type = type; assert(!IS_TOP_ALIGNED_ADDRESS(content_offset)); uint32_t entry_type; @@ -607,16 +608,11 @@ int cbfs_add_entry(struct cbfs_image *image, struct buffer *buffer, DEBUG("section 0x%x+0x%x for content_offset 0x%x.\n", addr, addr_next - addr, content_offset); - struct cbfs_file *header = - cbfs_create_file_header(type, buffer->size, name); - if (cbfs_add_entry_at(image, entry, buffer->data, content_offset, header, header_size) == 0) { - free(header); return 0; } - free(header); break; } diff --git a/util/cbfstool/cbfs_image.h b/util/cbfstool/cbfs_image.h index 432ea72cea..c1df911aff 100644 --- a/util/cbfstool/cbfs_image.h +++ b/util/cbfstool/cbfs_image.h @@ -94,7 +94,7 @@ int cbfs_export_entry(struct cbfs_image *image, const char *entry_name, * Returns 0 on success, otherwise non-zero. */ int cbfs_add_entry(struct cbfs_image *image, struct buffer *buffer, const char *name, uint32_t type, uint32_t content_offset, - uint32_t header_size); + void *header, uint32_t header_size); /* Removes an entry from CBFS image. Returns 0 on success, otherwise non-zero. */ int cbfs_remove_entry(struct cbfs_image *image, const char *name); diff --git a/util/cbfstool/cbfstool.c b/util/cbfstool/cbfstool.c index 8672362cfb..abb812a8c5 100644 --- a/util/cbfstool/cbfstool.c +++ b/util/cbfstool/cbfstool.c @@ -123,6 +123,7 @@ static int cbfs_add_integer_component(const char *name, uint32_t offset, uint32_t headeroffset) { struct cbfs_image image; + struct cbfs_file *header = NULL; struct buffer buffer; int i, ret = 1; @@ -151,8 +152,11 @@ static int cbfs_add_integer_component(const char *name, offset = convert_to_from_top_aligned(param.image_region, -offset); + header = cbfs_create_file_header(CBFS_COMPONENT_RAW, + buffer.size, name); + uint32_t header_size = cbfs_calculate_file_header_size(name); if (cbfs_add_entry(&image, &buffer, name, CBFS_COMPONENT_RAW, - offset, 0) != 0) { + offset, header, header_size) != 0) { ERROR("Failed to add %llu into ROM image as '%s'.\n", (long long unsigned)u64val, name); goto done; @@ -161,6 +165,7 @@ static int cbfs_add_integer_component(const char *name, ret = 0; done: + free(header); buffer_delete(&buffer); return ret; } @@ -202,9 +207,11 @@ static int cbfs_add_component(const char *filename, return 1; } + struct cbfs_file *header = + cbfs_create_file_header(type, buffer.size, name); uint32_t header_size = cbfs_calculate_file_header_size(name); - if (convert && convert(&buffer, &offset, NULL) != 0) { + if (convert && convert(&buffer, &offset, header) != 0) { ERROR("Failed to parse file '%s'.\n", filename); buffer_delete(&buffer); return 1; @@ -214,13 +221,16 @@ static int cbfs_add_component(const char *filename, offset = convert_to_from_top_aligned(param.image_region, -offset); - if (cbfs_add_entry(&image, &buffer, name, type, offset, header_size) + if (cbfs_add_entry(&image, &buffer, name, type, offset, + header, header_size) != 0) { ERROR("Failed to add '%s' into ROM image.\n", filename); + free(header); buffer_delete(&buffer); return 1; } + free(header); buffer_delete(&buffer); return 0; }