summaryrefslogtreecommitdiffstats
path: root/layout.c
diff options
context:
space:
mode:
authorDaniel Campello <campello@chromium.org>2021-04-16 15:26:42 -0600
committerEdward O'Callaghan <quasisec@chromium.org>2021-05-02 23:45:43 +0000
commitce983bccaab450d358854494f15c2d8a1846d56b (patch)
tree79d41a980587c2a1ebe40b65f837edd16232d387 /layout.c
parent0969e43b3fae48c90aaf1df284560f6b76f84efd (diff)
downloadflashrom-ce983bccaab450d358854494f15c2d8a1846d56b.tar.gz
flashrom-ce983bccaab450d358854494f15c2d8a1846d56b.tar.bz2
flashrom-ce983bccaab450d358854494f15c2d8a1846d56b.zip
cli_classic.c: add -x option for do_extract()
This change introduces a new option to extract all layout regions to files with the name of each region (or with the provided filename via -i region:file). It is implemented by mutating the flash layout to include all regions and backfilling the entry->file with entry->name (replacing spaces with underscores) Signed-off-by: Daniel Campello <campello@chromium.org> Change-Id: I8c69223fa92cf5b50abe070f1ab9f19d3b42f6ff Reviewed-on: https://review.coreboot.org/c/flashrom/+/52450 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Edward O'Callaghan <quasisec@chromium.org>
Diffstat (limited to 'layout.c')
-rw-r--r--layout.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/layout.c b/layout.c
index d0d2607e1..7fd203d13 100644
--- a/layout.c
+++ b/layout.c
@@ -15,6 +15,7 @@
* GNU General Public License for more details.
*/
+#include <ctype.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
@@ -308,6 +309,24 @@ int normalize_romentries(const struct flashctx *flash)
return ret;
}
+void prepare_layout_for_extraction(struct flashctx *flash)
+{
+ const struct flashrom_layout *const l = get_layout(flash);
+ unsigned int i, j;
+
+ for (i = 0; i < l->num_entries; ++i) {
+ l->entries[i].included = true;
+
+ if (!l->entries[i].file)
+ l->entries[i].file = strdup(l->entries[i].name);
+
+ for (j = 0; l->entries[i].file[j]; j++) {
+ if (isspace(l->entries[i].file[j]))
+ l->entries[i].file[j] = '_';
+ }
+ }
+}
+
const struct romentry *layout_next_included_region(
const struct flashrom_layout *const l, const chipoff_t where)
{