if you look at the second half of doit with this patch applied, it is quite clear, that most of it should be guarded by a huge if(write_it) clause. maybe move this into a function?
Signed-off-by: Stefan Tauner stefan.tauner@student.tuwien.ac.at --- flashrom.c | 7 ++++--- 1 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/flashrom.c b/flashrom.c index 7a1a7ec..85135c2 100644 --- a/flashrom.c +++ b/flashrom.c @@ -1992,7 +1992,7 @@ int doit(struct flashchip *flash, int force, const char *filename, int read_it, goto out; }
- if (write_it || verify_it) { + if (write_it || verify_it) { /* always true: erase and read already goto'ed */ if (read_buf_from_file(newcontents, size, filename)) { ret = 1; goto out; @@ -2010,7 +2010,7 @@ int doit(struct flashchip *flash, int force, const char *filename, int read_it, * preserved, but in that case we might perform unneeded erase which * takes time as well. */ - if (read_all_first) { + if (read_all_first && write_it) { msg_cinfo("Reading old flash chip contents... "); if (flash->read(flash, oldcontents, 0, size)) { ret = 1; @@ -2021,7 +2021,8 @@ int doit(struct flashchip *flash, int force, const char *filename, int read_it, msg_cinfo("done.\n");
/* Build a new image from the given layout. */ - build_new_image(flash, read_all_first, oldcontents, newcontents); + if (write_it) + build_new_image(flash, read_all_first, oldcontents, newcontents);
if (write_it && erase_and_write_flash(flash, oldcontents, newcontents)) { msg_cerr("Uh oh. Erase/write failed.");