cbfstool: use variable length array to model cbfs_file's filename

Change-Id: Ib056983630b2899d7e6cbcb43f6b7153f0f8e282
Signed-off-by: Patrick Georgi <pgeorgi@chromium.org>
Reviewed-on: http://review.coreboot.org/10928
Tested-by: build bot (Jenkins)
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
Patrick Georgi 2015-07-15 16:42:38 +02:00 committed by Patrick Georgi
parent 5dc01ac506
commit c569b8bfdc
2 changed files with 7 additions and 7 deletions

View File

@ -77,6 +77,7 @@ struct cbfs_file {
uint32_t checksum; uint32_t checksum;
/* length of header incl. variable data */ /* length of header incl. variable data */
uint32_t offset; uint32_t offset;
char filename[];
} __PACKED; } __PACKED;
_Static_assert(sizeof(struct cbfs_file) == 24, "cbfs_file size mismatch"); _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_COMPONENT_NULL 0xFFFFFFFF
#define CBFS_NAME(_c) (((char *) (_c)) + sizeof(struct cbfs_file))
#define CBFS_SUBHEADER(_p) ( (void *) ((((uint8_t *) (_p)) + ntohl((_p)->offset))) ) #define CBFS_SUBHEADER(_p) ( (void *) ((((uint8_t *) (_p)) + ntohl((_p)->offset))) )
/* cbfs_image.c */ /* cbfs_image.c */
uint32_t get_cbfs_entry_type(const char *name, uint32_t default_value); uint32_t get_cbfs_entry_type(const char *name, uint32_t default_value);

View File

@ -641,7 +641,7 @@ struct cbfs_file *cbfs_get_entry(struct cbfs_image *image, const char *name)
for (entry = cbfs_find_first_entry(image); for (entry = cbfs_find_first_entry(image);
entry && cbfs_is_valid_entry(image, entry); entry && cbfs_is_valid_entry(image, entry);
entry = cbfs_find_next_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); DEBUG("cbfs_get_entry: found %s\n", name);
return entry; return entry;
} }
@ -692,13 +692,13 @@ int cbfs_remove_entry(struct cbfs_image *image, const char *name)
next = cbfs_find_next_entry(image, entry); next = cbfs_find_next_entry(image, entry);
assert(next); assert(next);
DEBUG("cbfs_remove_entry: Removed %s @ 0x%x\n", 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); entry->type = htonl(CBFS_COMPONENT_DELETED);
len = (cbfs_get_entry_addr(image, next) - len = (cbfs_get_entry_addr(image, next) -
cbfs_get_entry_addr(image, entry)); cbfs_get_entry_addr(image, entry));
entry->offset = htonl(cbfs_calculate_file_header_size("")); entry->offset = htonl(cbfs_calculate_file_header_size(""));
entry->len = htonl(len - ntohl(entry->offset)); 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, memset(CBFS_SUBHEADER(entry), CBFS_CONTENT_DEFAULT_VALUE,
ntohl(entry->len)); ntohl(entry->len));
return 0; 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, int cbfs_print_entry_info(struct cbfs_image *image, struct cbfs_file *entry,
void *arg) void *arg)
{ {
const char *name = CBFS_NAME(entry); const char *name = entry->filename;
struct cbfs_payload_segment *payload; struct cbfs_payload_segment *payload;
FILE *fp = (FILE *)arg; FILE *fp = (FILE *)arg;
@ -1025,8 +1025,8 @@ int cbfs_create_empty_entry(struct cbfs_file *entry,
entry->len = htonl(len); entry->len = htonl(len);
entry->checksum = 0; // TODO Build a checksum algorithm. entry->checksum = 0; // TODO Build a checksum algorithm.
entry->offset = htonl(cbfs_calculate_file_header_size(name)); entry->offset = htonl(cbfs_calculate_file_header_size(name));
memset(CBFS_NAME(entry), 0, ntohl(entry->offset) - sizeof(*entry)); memset(entry->filename, 0, ntohl(entry->offset) - sizeof(*entry));
strcpy(CBFS_NAME(entry), name); strcpy(entry->filename, name);
memset(CBFS_SUBHEADER(entry), CBFS_CONTENT_DEFAULT_VALUE, len); memset(CBFS_SUBHEADER(entry), CBFS_CONTENT_DEFAULT_VALUE, len);
return 0; return 0;
} }