what about something like this? single loop, more obvious(?) execution flow printf is misaligned, but you get the idea.
Signed-off-by: Stefan Tauner stefan.tauner@student.tuwien.ac.at ---
cli_classic.c | 19 ++++++++++++++++--- 1 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/cli_classic.c b/cli_classic.c index 7661612..df1f668 100644 --- a/cli_classic.c +++ b/cli_classic.c @@ -456,11 +456,25 @@ int main(int argc, char *argv[]) printf("Note: flashrom can never write if the flash " "chip isn't found automatically.\n"); } -#if 0 // FIXME: What happens for a forced chip read if multiple compatible programmers are registered? if (force && read_it && chip_to_probe) { + struct registered_programmer *pgm; + struct registered_programmer *first_pgm = NULL; printf("Force read (-f -r -c) requested, pretending " "the chip is there:\n"); - startchip = probe_flash(0, &flashes[0], 1); + for (j = 0; j < registered_programmer_count; j++) { + pgm = ®istered_programmers[j]; + if (pgm->buses_supported & flashes[0].bustype) { + if (first_pgm == NULL) + first_pgm = pgm; + else { + printf("More than one compatible controller " + "found for the requested flash chip, " + "using the first one.\n"); + break; + } + } + } + startchip = probe_flash(first_pgm, 0, &flashes[0], 1); if (startchip == -1) { printf("Probing for flash chip '%s' failed.\n", chip_to_probe); @@ -471,7 +485,6 @@ int main(int argc, char *argv[]) "contain garbage.\n"); return read_flash_to_file(&flashes[0], filename); } -#endif ret = 1; goto out_shutdown; } else if (!chip_to_probe) {