[coreboot-gerrit] New patch to review for coreboot: cbfstool: Make cbfs_create_empty_entry build a more complete header

Patrick Georgi (pgeorgi@google.com) gerrit at coreboot.org
Wed Aug 12 18:38:49 CEST 2015


Patrick Georgi (pgeorgi at google.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/11218

-gerrit

commit 952a7dc95f021eab4a88bc6a9a402e9ff3a1d3b7
Author: Patrick Georgi <pgeorgi at google.com>
Date:   Wed Aug 12 09:12:06 2015 +0200

    cbfstool: Make cbfs_create_empty_entry build a more complete header
    
    Pass the file type into it instead of creating an entry, then modifying the
    header field again after the fact.
    
    Change-Id: I655583218f5085035b0f80efff7f91a66b5b296e
    Signed-off-by: Patrick Georgi <pgeorgi at google.com>
---
 util/cbfstool/cbfs_image.c | 25 +++++++++++++------------
 util/cbfstool/cbfs_image.h |  2 +-
 2 files changed, 14 insertions(+), 13 deletions(-)

diff --git a/util/cbfstool/cbfs_image.c b/util/cbfstool/cbfs_image.c
index b45969c..b0c3080 100644
--- a/util/cbfstool/cbfs_image.c
+++ b/util/cbfstool/cbfs_image.c
@@ -240,7 +240,8 @@ int cbfs_image_create(struct cbfs_image *image, size_t entries_size)
 
 	size_t capacity = entries_size - empty_header_len;
 	LOG("Created CBFS (capacity = %zu bytes)\n", capacity);
-	return cbfs_create_empty_entry(entry_header, capacity, "");
+	return cbfs_create_empty_entry(entry_header, CBFS_COMPONENT_NULL,
+		capacity, "");
 }
 
 int cbfs_legacy_image_create(struct cbfs_image *image,
@@ -436,7 +437,8 @@ int cbfs_copy_instance(struct cbfs_image *image, size_t copy_offset,
 	if (last_entry_size < 0)
 		WARN("No room to create the last entry!\n")
 	else
-		cbfs_create_empty_entry(dst_entry, last_entry_size, "");
+		cbfs_create_empty_entry(dst_entry, CBFS_COMPONENT_NULL,
+			last_entry_size, "");
 
 	return 0;
 }
@@ -480,14 +482,14 @@ static int cbfs_add_entry_at(struct cbfs_image *image,
 	if (target - addr > min_entry_size) {
 		DEBUG("|min|...|header|content|... <create new entry>\n");
 		len = target - addr - min_entry_size;
-		cbfs_create_empty_entry(entry, len, "");
+		cbfs_create_empty_entry(entry, CBFS_COMPONENT_NULL, len, "");
 		if (verbose > 1) cbfs_print_entry_info(image, entry, stderr);
 		entry = cbfs_find_next_entry(image, entry);
 		addr = cbfs_get_entry_addr(image, entry);
 	}
 
 	len = size + (content_offset - addr - header_size);
-	cbfs_create_empty_entry(entry, len, name);
+	cbfs_create_empty_entry(entry, type, len, name);
 	if (len != size) {
 		DEBUG("|..|header|content|... <use offset to create entry>\n");
 		DEBUG("before: offset=0x%x, len=0x%x\n",
@@ -501,7 +503,6 @@ static int cbfs_add_entry_at(struct cbfs_image *image,
 
 	// Ready to fill data into entry.
 	assert(ntohl(entry->len) == size);
-	entry->type = htonl(type);
 	DEBUG("content_offset: 0x%x, entry location: %x\n",
 	      content_offset, (int)((char*)CBFS_SUBHEADER(entry) -
 				    image->buffer.data));
@@ -527,7 +528,7 @@ static int cbfs_add_entry_at(struct cbfs_image *image,
 	}
 
 	len = addr_next - addr - min_entry_size;
-	cbfs_create_empty_entry(entry, len, "");
+	cbfs_create_empty_entry(entry, CBFS_COMPONENT_NULL, len, "");
 	if (verbose > 1) cbfs_print_entry_info(image, entry, stderr);
 	return 0;
 }
@@ -583,8 +584,7 @@ int cbfs_add_entry(struct cbfs_image *image, struct buffer *buffer,
 		if (!content_offset || content_offset == addr + header_size) {
 			DEBUG("Filling new entry data (%zd bytes).\n",
 			      buffer->size);
-			cbfs_create_empty_entry(entry, buffer->size, name);
-			entry->type = htonl(type);
+			cbfs_create_empty_entry(entry, type, buffer->size, name);
 			memcpy(CBFS_SUBHEADER(entry), buffer->data, buffer->size);
 			if (verbose)
 				cbfs_print_entry_info(image, entry, stderr);
@@ -606,7 +606,8 @@ int cbfs_add_entry(struct cbfs_image *image, struct buffer *buffer,
 			}
 			new_size -= cbfs_calculate_file_header_size("");
 			DEBUG("new size: %d\n", new_size);
-			cbfs_create_empty_entry(entry, new_size, "");
+			cbfs_create_empty_entry(entry, CBFS_COMPONENT_NULL,
+				new_size, "");
 			if (verbose)
 				cbfs_print_entry_info(image, entry, stderr);
 			return 0;
@@ -886,7 +887,7 @@ int cbfs_merge_empty_entry(struct cbfs_image *image, struct cbfs_file *entry,
 		DEBUG("join_empty_entry: combine 0x%x+0x%x and 0x%x+0x%x.\n",
 		      cbfs_get_entry_addr(image, entry), ntohl(entry->len),
 		      cbfs_get_entry_addr(image, next), ntohl(next->len));
-		cbfs_create_empty_entry(entry,
+		cbfs_create_empty_entry(entry, CBFS_COMPONENT_NULL,
 					(last_addr - addr -
 					 cbfs_calculate_file_header_size("")),
 					"");
@@ -1019,12 +1020,12 @@ int cbfs_is_valid_entry(struct cbfs_image *image, struct cbfs_file *entry)
 						strlen(CBFS_FILE_MAGIC));
 }
 
-int cbfs_create_empty_entry(struct cbfs_file *entry,
+int cbfs_create_empty_entry(struct cbfs_file *entry, int type,
 			    size_t len, const char *name)
 {
 	memset(entry, CBFS_CONTENT_DEFAULT_VALUE, sizeof(*entry));
 	memcpy(entry->magic, CBFS_FILE_MAGIC, sizeof(entry->magic));
-	entry->type = htonl(CBFS_COMPONENT_NULL);
+	entry->type = htonl(type);
 	entry->len = htonl(len);
 	entry->attributes_offset = 0;
 	entry->offset = htonl(cbfs_calculate_file_header_size(name));
diff --git a/util/cbfstool/cbfs_image.h b/util/cbfstool/cbfs_image.h
index ecd7db7..ad999e3 100644
--- a/util/cbfstool/cbfs_image.h
+++ b/util/cbfstool/cbfs_image.h
@@ -101,7 +101,7 @@ int cbfs_remove_entry(struct cbfs_image *image, const char *name);
 
 /* Initializes a new empty (type = NULL) entry with size and name in CBFS image.
  * Returns 0 on success, otherwise (ex, not found) non-zero. */
-int cbfs_create_empty_entry(struct cbfs_file *entry,
+int cbfs_create_empty_entry(struct cbfs_file *entry, int type,
 			    size_t len, const char *name);
 
 /* Finds a location to put given content by specified criteria:



More information about the coreboot-gerrit mailing list