Add layout_cleanup() to layout.c and hook it up in cli_classic.c.
Signed-off-by: Stefan Tauner stefan.tauner@student.tuwien.ac.at Acked-by: Stefan Tauner stefan.tauner@student.tuwien.ac.at --- cli_classic.c | 3 +-- flash.h | 1 + layout.c | 16 ++++++++++++++++ 3 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/cli_classic.c b/cli_classic.c index 4c71d07..70bccb5 100644 --- a/cli_classic.c +++ b/cli_classic.c @@ -221,8 +221,6 @@ int main(int argc, char *argv[]) free(tempstr); cli_classic_abort_usage(); } - /* FIXME: A pointer to the image name is saved in a static array (of size MAX_ROMLAYOUT) - * by register_include_arg() and needs to be freed after processing them. */ break; case 'L': if (++operation_specified > 1) { @@ -527,6 +525,7 @@ out: for (i = 0; i < chipcount; i++) free(flashes[i].chip);
+ layout_cleanup(); free(filename); free(layoutfile); free(pparam); diff --git a/flash.h b/flash.h index 63701ed..7b88477 100644 --- a/flash.h +++ b/flash.h @@ -320,6 +320,7 @@ int register_include_arg(char *name); int process_include_args(void); int read_romlayout(char *name); int handle_romentries(const struct flashctx *flash, uint8_t *oldcontents, uint8_t *newcontents); +void layout_cleanup(void);
/* spi.c */ struct spi_command { diff --git a/layout.c b/layout.c index 8bb1666..86351b8 100644 --- a/layout.c +++ b/layout.c @@ -3,6 +3,7 @@ * * Copyright (C) 2005-2008 coresystems GmbH * (Written by Stefan Reinauer stepan@coresystems.de for coresystems GmbH) + * Copyright (C) 2011-2013 Stefan Tauner * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -189,6 +190,21 @@ int process_include_args(void) return 0; }
+void layout_cleanup(void) +{ + int i; + for (i = 0; i < num_include_args; i++) { + free(include_args[i]); + include_args[i] = NULL; + } + num_include_args = 0; + + for (i = 0; i < num_rom_entries; i++) { + rom_entries[i].included = 0; + } + num_rom_entries = 0; +} + romentry_t *get_next_included_romentry(unsigned int start) { int i;