summaryrefslogtreecommitdiff
path: root/util/cbfstool/cbfs_image.c
diff options
context:
space:
mode:
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;
}