summaryrefslogtreecommitdiff
path: root/util/cbfstool/cbfs_image.c
diff options
context:
space:
mode:
authorPatrick Georgi <pgeorgi@google.com>2015-08-12 09:20:11 +0200
committerPatrick Georgi <pgeorgi@google.com>2015-08-13 16:09:52 +0200
commit57edf16be5ddef5da272ff8e1a9f1d78091377d9 (patch)
treee5270e2260593920656d0d3ad0b7887b1affa3d5 /util/cbfstool/cbfs_image.c
parentedf25d9076de79579bafa1010bb5350c4c992158 (diff)
downloadcoreboot-57edf16be5ddef5da272ff8e1a9f1d78091377d9.tar.xz
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@google.com> Reviewed-on: http://review.coreboot.org/11219 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Diffstat (limited to 'util/cbfstool/cbfs_image.c')
-rw-r--r--util/cbfstool/cbfs_image.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/util/cbfstool/cbfs_image.c b/util/cbfstool/cbfs_image.c
index b0c3080d80..ddc9cf5366 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;
}