diff options
author | Nico Huber <nico.h@gmx.de> | 2019-06-16 19:28:35 +0200 |
---|---|---|
committer | Nico Huber <nico.h@gmx.de> | 2021-06-26 15:53:04 +0000 |
commit | 06a89d713951a2e08ef8fb698a7688357baa83d1 (patch) | |
tree | 0c56a5cf117776080b467c7445047920dfbfbcd3 /libflashrom.c | |
parent | 4abb62c4ac1f25e40f2569535322342b9c939558 (diff) | |
download | flashrom-06a89d713951a2e08ef8fb698a7688357baa83d1.tar.gz flashrom-06a89d713951a2e08ef8fb698a7688357baa83d1.tar.bz2 flashrom-06a89d713951a2e08ef8fb698a7688357baa83d1.zip |
layout: Introduce layout_next()
Also, a `layout.c` internal version mutable_layout_next() that
allows to modify layout entries and a shorthand to look up an
entry by name, _layout_entry_by_name().
Use the new functions where applicable and the code is not
dropped later in this train, and also to compare the layouts
in flashrom_layout_read_from_ifd() in depth.
Change-Id: I284958471c61344d29d92c95d88475065a9ca9aa
Signed-off-by: Nico Huber <nico.h@gmx.de>
Reviewed-on: https://review.coreboot.org/c/flashrom/+/33542
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>
Diffstat (limited to 'libflashrom.c')
-rw-r--r-- | libflashrom.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/libflashrom.c b/libflashrom.c index d999efcd0..c6a598b60 100644 --- a/libflashrom.c +++ b/libflashrom.c @@ -470,8 +470,13 @@ int flashrom_layout_read_from_ifd(struct flashrom_layout **const layout, struct goto _finalize_ret; } - if (chip_layout->base.num_entries != dump_layout.base.num_entries || - memcmp(chip_layout->entries, dump_layout.entries, sizeof(dump_layout.entries))) { + const struct romentry *chip_entry = layout_next(&chip_layout->base, NULL); + const struct romentry *dump_entry = layout_next(&dump_layout.base, NULL); + while (chip_entry && dump_entry && !memcmp(chip_entry, dump_entry, sizeof(*chip_entry))) { + chip_entry = layout_next(&chip_layout->base, chip_entry); + dump_entry = layout_next(&dump_layout.base, dump_entry); + } + if (chip_entry || dump_entry) { msg_cerr("Descriptors don't match!\n"); ret = 5; goto _finalize_ret; |