[coreboot-gerrit] New patch to review for coreboot: cbfstool: use variable length array to model cbfs_file's filename

Patrick Georgi (pgeorgi@google.com) gerrit at coreboot.org
Wed Jul 15 21:52:53 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/10928

-gerrit

commit 72fc8046ed073ffb8c83eb0ff081e042900f6f34
Author: Patrick Georgi <pgeorgi at chromium.org>
Date:   Wed Jul 15 16:42:38 2015 +0200

    cbfstool: use variable length array to model cbfs_file's filename
    
    Change-Id: Ib056983630b2899d7e6cbcb43f6b7153f0f8e282
    Signed-off-by: Patrick Georgi <pgeorgi at chromium.org>
---
 util/cbfstool/cbfs.h       |  2 +-
 util/cbfstool/cbfs_image.c | 12 ++++++------
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/util/cbfstool/cbfs.h b/util/cbfstool/cbfs.h
index 6286eff..1996b1c 100644
--- a/util/cbfstool/cbfs.h
+++ b/util/cbfstool/cbfs.h
@@ -77,6 +77,7 @@ struct cbfs_file {
 	uint32_t checksum;
 	/* length of header incl. variable data */
 	uint32_t offset;
+	char filename[];
 } __PACKED;
 
 _Static_assert(sizeof(struct cbfs_file) == 24, "cbfs_file size mismatch");
@@ -140,7 +141,6 @@ struct cbfs_payload {
  */
 #define CBFS_COMPONENT_NULL 0xFFFFFFFF
 
-#define CBFS_NAME(_c) (((char *) (_c)) + sizeof(struct cbfs_file))
 #define CBFS_SUBHEADER(_p) ( (void *) ((((uint8_t *) (_p)) + ntohl((_p)->offset))) )
 /* cbfs_image.c */
 uint32_t get_cbfs_entry_type(const char *name, uint32_t default_value);
diff --git a/util/cbfstool/cbfs_image.c b/util/cbfstool/cbfs_image.c
index 2ce4bdd..783999c 100644
--- a/util/cbfstool/cbfs_image.c
+++ b/util/cbfstool/cbfs_image.c
@@ -641,7 +641,7 @@ struct cbfs_file *cbfs_get_entry(struct cbfs_image *image, const char *name)
 	for (entry = cbfs_find_first_entry(image);
 	     entry && cbfs_is_valid_entry(image, entry);
 	     entry = cbfs_find_next_entry(image, entry)) {
-		if (strcasecmp(CBFS_NAME(entry), name) == 0) {
+		if (strcasecmp(entry->filename, name) == 0) {
 			DEBUG("cbfs_get_entry: found %s\n", name);
 			return entry;
 		}
@@ -692,13 +692,13 @@ int cbfs_remove_entry(struct cbfs_image *image, const char *name)
 	next = cbfs_find_next_entry(image, entry);
 	assert(next);
 	DEBUG("cbfs_remove_entry: Removed %s @ 0x%x\n",
-	      CBFS_NAME(entry), cbfs_get_entry_addr(image, entry));
+	      entry->filename, cbfs_get_entry_addr(image, entry));
 	entry->type = htonl(CBFS_COMPONENT_DELETED);
 	len = (cbfs_get_entry_addr(image, next) -
 	       cbfs_get_entry_addr(image, entry));
 	entry->offset = htonl(cbfs_calculate_file_header_size(""));
 	entry->len = htonl(len - ntohl(entry->offset));
-	memset(CBFS_NAME(entry), 0, ntohl(entry->offset) - sizeof(*entry));
+	memset(entry->filename, 0, ntohl(entry->offset) - sizeof(*entry));
 	memset(CBFS_SUBHEADER(entry), CBFS_CONTENT_DEFAULT_VALUE,
 	       ntohl(entry->len));
 	return 0;
@@ -787,7 +787,7 @@ static int cbfs_print_decoded_payload_segment_info(
 int cbfs_print_entry_info(struct cbfs_image *image, struct cbfs_file *entry,
 			  void *arg)
 {
-	const char *name = CBFS_NAME(entry);
+	const char *name = entry->filename;
 	struct cbfs_payload_segment *payload;
 	FILE *fp = (FILE *)arg;
 
@@ -1025,8 +1025,8 @@ int cbfs_create_empty_entry(struct cbfs_file *entry,
 	entry->len = htonl(len);
 	entry->checksum = 0;  // TODO Build a checksum algorithm.
 	entry->offset = htonl(cbfs_calculate_file_header_size(name));
-	memset(CBFS_NAME(entry), 0, ntohl(entry->offset) - sizeof(*entry));
-	strcpy(CBFS_NAME(entry), name);
+	memset(entry->filename, 0, ntohl(entry->offset) - sizeof(*entry));
+	strcpy(entry->filename, name);
 	memset(CBFS_SUBHEADER(entry), CBFS_CONTENT_DEFAULT_VALUE, len);
 	return 0;
 }



More information about the coreboot-gerrit mailing list