Attention is currently required from: Edward O'Callaghan, Daniel Campello, Anastasia Klimchuk, Peter Marheine. Hello Edward O'Callaghan, Daniel Campello, Anastasia Klimchuk, Peter Marheine,
I'd like you to do a code review. Please visit
https://review.coreboot.org/c/flashrom/+/54286
to review the following change.
Change subject: layout: Kill the global layout ......................................................................
layout: Kill the global layout
Change-Id: Ic302e9c5faf1368e5ca244ce461e55e14f916ab8 Signed-off-by: Nico Huber nico.h@gmx.de --- M cli_classic.c M flash.h M layout.c M layout.h 4 files changed, 11 insertions(+), 27 deletions(-)
git pull ssh://review.coreboot.org:29418/flashrom refs/changes/86/54286/1
diff --git a/cli_classic.c b/cli_classic.c index 9c5f22b..2ed52ff 100644 --- a/cli_classic.c +++ b/cli_classic.c @@ -516,12 +516,12 @@ } msg_gdbg("\n");
- if (layoutfile && read_romlayout(layoutfile)) { + if (layoutfile && layout_from_file(&layout, layoutfile)) { ret = 1; goto out; }
- if (!ifd && !fmap && process_include_args(get_global_layout(), include_args)) { + if (!ifd && !fmap && process_include_args(layout, include_args)) { ret = 1; goto out; } @@ -711,9 +711,7 @@ goto out_shutdown; }
- if (layoutfile) { - layout = get_global_layout(); - } else if (ifd && (flashrom_layout_read_from_ifd(&layout, fill_flash, NULL, 0) || + if (ifd && (flashrom_layout_read_from_ifd(&layout, fill_flash, NULL, 0) || process_include_args(layout, include_args))) { ret = 1; goto out_shutdown; diff --git a/flash.h b/flash.h index c8c0f9d..c50c892 100644 --- a/flash.h +++ b/flash.h @@ -419,7 +419,6 @@
/* layout.c */ int register_include_arg(struct layout_include_args **args, const char *arg); -int read_romlayout(const char *name); void layout_cleanup(struct layout_include_args **args);
/* spi.c */ diff --git a/layout.c b/layout.c index bb83580..2ed670f 100644 --- a/layout.c +++ b/layout.c @@ -35,15 +35,6 @@ struct layout_include_args *next; };
-static struct flashrom_layout *global_layout; - -struct flashrom_layout *get_global_layout(void) -{ - if (!global_layout) - flashrom_layout_empty(&global_layout); - return global_layout; -} - const struct flashrom_layout *get_default_layout(const struct flashrom_flashctx *const flashctx) { return flashctx->default_layout; @@ -75,13 +66,15 @@ }
#ifndef __LIBPAYLOAD__ -int read_romlayout(const char *name) +int layout_from_file(struct flashrom_layout **layout, const char *name) { - struct flashrom_layout *const layout = get_global_layout(); FILE *romlayout; char tempstr[256], tempname[256]; int ret = 1;
+ if (flashrom_layout_empty(layout)) + return 1; + romlayout = fopen(name, "r");
if (!romlayout) { @@ -107,7 +100,7 @@ msg_gerr("Error parsing layout file. Offending string: "%s"\n", tempstr); goto _close_ret; } - if (flashrom_layout_add_region(layout, + if (flashrom_layout_add_region(*layout, strtol(tstr1, NULL, 16), strtol(tstr2, NULL, 16), tempname)) goto _close_ret; } @@ -219,7 +212,7 @@ return 0;
/* User has specified an include argument, but no layout is loaded. */ - if (!l->head) { + if (!l || !l->head) { msg_gerr("Region requested (with -i "%s"), " "but no layout data is available.\n", args->name); @@ -283,7 +276,6 @@
void layout_cleanup(struct layout_include_args **args) { - struct flashrom_layout *const layout = get_global_layout(); struct layout_include_args *tmp;
while (*args) { @@ -293,9 +285,6 @@ free(*args); *args = tmp; } - - global_layout = NULL; - flashrom_layout_release(layout); }
int layout_sanity_checks(const struct flashrom_flashctx *const flash) @@ -459,9 +448,6 @@ */ void flashrom_layout_release(struct flashrom_layout *const layout) { - if (layout == global_layout) - return; - while (layout && layout->head) { struct romentry *const entry = layout->head; layout->head = entry->next; diff --git a/layout.h b/layout.h index f5fbc50..e62fdf9 100644 --- a/layout.h +++ b/layout.h @@ -50,10 +50,11 @@ struct layout_include_args;
struct flashrom_flashctx; -struct flashrom_layout *get_global_layout(void); const struct flashrom_layout *get_default_layout(const struct flashrom_flashctx *); const struct flashrom_layout *get_layout(const struct flashrom_flashctx *const flashctx);
+int layout_from_file(struct flashrom_layout **, const char *name); + int get_region_range(struct flashrom_layout *const l, const char *name, unsigned int *start, unsigned int *len); int process_include_args(struct flashrom_layout *l, const struct layout_include_args *const args);