diff options
author | Nico Huber <nico.h@gmx.de> | 2019-06-15 15:44:39 +0200 |
---|---|---|
committer | Nico Huber <nico.h@gmx.de> | 2021-06-26 15:53:31 +0000 |
commit | 7ebd578100e6526ef46c98cb9978d692160d8179 (patch) | |
tree | f87dc8068f97aa101ae4151dba40a9fd7dc77273 | |
parent | 06a89d713951a2e08ef8fb698a7688357baa83d1 (diff) | |
download | flashrom-7ebd578100e6526ef46c98cb9978d692160d8179.tar.gz flashrom-7ebd578100e6526ef46c98cb9978d692160d8179.tar.bz2 flashrom-7ebd578100e6526ef46c98cb9978d692160d8179.zip |
layout: Add `capacity` field
Use it to keep track of the size of the `entries` array. An interim
solution until we have dynamic allocation.
Change-Id: Ib5f431bc0a72a79a53fa1376c3417942b19dd3a0
Signed-off-by: Nico Huber <nico.h@gmx.de>
Reviewed-on: https://review.coreboot.org/c/flashrom/+/33516
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Reviewed-by: Anastasia Klimchuk <aklm@chromium.org>
Reviewed-by: Peter Marheine <pmarheine@chromium.org>
Reviewed-by: Edward O'Callaghan <quasisec@chromium.org>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
-rw-r--r-- | flashrom.c | 1 | ||||
-rw-r--r-- | ich_descriptors.c | 1 | ||||
-rw-r--r-- | layout.c | 8 | ||||
-rw-r--r-- | layout.h | 2 | ||||
-rw-r--r-- | libflashrom.c | 2 |
5 files changed, 9 insertions, 5 deletions
@@ -825,6 +825,7 @@ notfound: /* Fill fallback layout covering the whole chip. */ struct single_layout *const fallback = &flash->fallback_layout; fallback->base.entries = &fallback->entry; + fallback->base.capacity = 1; fallback->base.num_entries = 1; fallback->entry.start = 0; fallback->entry.end = flash->chip->total_size * 1024 - 1; diff --git a/ich_descriptors.c b/ich_descriptors.c index 4ae3a1b8..143e3920 100644 --- a/ich_descriptors.c +++ b/ich_descriptors.c @@ -1295,6 +1295,7 @@ int layout_from_ich_descriptors(struct ich_layout *const layout, const void *con ++j; } layout->base.entries = layout->entries; + layout->base.capacity = ARRAY_SIZE(layout->entries); layout->base.num_entries = j; return 0; } @@ -26,7 +26,7 @@ #include "layout.h" static struct romentry entries[MAX_ROMLAYOUT]; -static struct flashrom_layout global_layout = { entries, 0 }; +static struct flashrom_layout global_layout = { entries, MAX_ROMLAYOUT, 0 }; struct flashrom_layout *get_global_layout(void) { @@ -87,9 +87,9 @@ int read_romlayout(const char *name) while (!feof(romlayout)) { char *tstr1, *tstr2; - if (layout->num_entries >= MAX_ROMLAYOUT) { - msg_gerr("Maximum number of ROM images (%i) in layout " - "file reached.\n", MAX_ROMLAYOUT); + if (layout->num_entries >= layout->capacity) { + msg_gerr("Maximum number of ROM images (%zu) in layout " + "file reached.\n", layout->capacity); goto _close_ret; } if (2 != fscanf(romlayout, "%255s %255s\n", tempstr, tempname)) @@ -46,6 +46,8 @@ struct romentry { struct flashrom_layout { /* entries store the entries specified in a layout file and associated run-time data */ struct romentry *entries; + /* the maximum number of entries */ + size_t capacity; /* the number of successfully parsed entries */ size_t num_entries; }; diff --git a/libflashrom.c b/libflashrom.c index c6a598b6..2a39a80d 100644 --- a/libflashrom.c +++ b/libflashrom.c @@ -506,7 +506,7 @@ static int flashrom_layout_parse_fmap(struct flashrom_layout **layout, if (!fmap || !l) return 1; - if (l->num_entries + fmap->nareas > MAX_ROMLAYOUT) { + if (l->num_entries + fmap->nareas > l->capacity) { msg_gerr("Cannot add fmap entries to layout - Too many entries.\n"); return 1; } |