[coreboot-gerrit] Patch set updated for coreboot: cbfstool: factor out creating a cbfs file header

Patrick Georgi (pgeorgi@google.com) gerrit at coreboot.org
Thu Aug 13 10:27:51 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/11219

-gerrit

commit 90caf846d7ed6d5894152f4c1ed6b9933d7fff09
Author: Patrick Georgi <pgeorgi at google.com>
Date:   Wed Aug 12 09:20:11 2015 +0200

    cbfstool: factor out creating a cbfs file header
    
    We will want to create headers that live outside the final image at some point
    (eg. to build the file before we even know where to place it).
    
    Change-Id: Ie4c0323df8d5be955aec3621b75309e8f11fae49
    Signed-off-by: Patrick Georgi <pgeorgi at google.com>
---
 util/cbfstool/cbfs_image.c | 17 +++++++++++++++--
 util/cbfstool/cbfs_image.h |  5 +++++
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/util/cbfstool/cbfs_image.c b/util/cbfstool/cbfs_image.c
index b0c3080..ddc9cf5 100644
--- a/util/cbfstool/cbfs_image.c
+++ b/util/cbfstool/cbfs_image.c
@@ -1020,10 +1020,14 @@ 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 type,
+struct cbfs_file *cbfs_create_file_header(int type,
 			    size_t len, const char *name)
 {
-	memset(entry, CBFS_CONTENT_DEFAULT_VALUE, sizeof(*entry));
+	// assume that there won't be file names of ~1000 bytes
+	const int bufsize = 1024;
+
+	struct cbfs_file *entry = malloc(bufsize);
+	memset(entry, CBFS_CONTENT_DEFAULT_VALUE, bufsize);
 	memcpy(entry->magic, CBFS_FILE_MAGIC, sizeof(entry->magic));
 	entry->type = htonl(type);
 	entry->len = htonl(len);
@@ -1031,6 +1035,15 @@ int cbfs_create_empty_entry(struct cbfs_file *entry, int type,
 	entry->offset = htonl(cbfs_calculate_file_header_size(name));
 	memset(entry->filename, 0, ntohl(entry->offset) - sizeof(*entry));
 	strcpy(entry->filename, name);
+	return entry;
+}
+
+int cbfs_create_empty_entry(struct cbfs_file *entry, int type,
+			    size_t len, const char *name)
+{
+	struct cbfs_file *tmp = cbfs_create_file_header(type, len, name);
+	memcpy(entry, tmp, ntohl(tmp->offset));
+	free(tmp);
 	memset(CBFS_SUBHEADER(entry), CBFS_CONTENT_DEFAULT_VALUE, len);
 	return 0;
 }
diff --git a/util/cbfstool/cbfs_image.h b/util/cbfstool/cbfs_image.h
index ad999e3..432ea72 100644
--- a/util/cbfstool/cbfs_image.h
+++ b/util/cbfstool/cbfs_image.h
@@ -99,6 +99,11 @@ int cbfs_add_entry(struct cbfs_image *image, struct buffer *buffer,
 /* Removes an entry from CBFS image. Returns 0 on success, otherwise non-zero. */
 int cbfs_remove_entry(struct cbfs_image *image, const char *name);
 
+/* Create a new cbfs file header structure to work with.
+   Returns newly allocated memory that the caller needs to free after use. */
+struct cbfs_file *cbfs_create_file_header(int type, size_t len,
+	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 type,



More information about the coreboot-gerrit mailing list