From d5660141ec26bad821c90596a0f0b3db7fa35971 Mon Sep 17 00:00:00 2001 From: Carl-Daniel Hailfinger Date: Fri, 15 Jul 2011 23:47:45 +0000 Subject: Fix and clean up cli_classic.c Don't ignore -i if it is specified before -l Check if image mentioned by -i is present in layout file Consolidate duplicated programmer_shutdown calls Kill outdated comments Finish parameter checking before -L/-z is executed Corresponding to flashrom svn r1373. Signed-off-by: Carl-Daniel Hailfinger Acked-by: David Hendricks --- cli_classic.c | 53 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/cli_classic.c b/cli_classic.c index 59096a0..9168bc1 100644 --- a/cli_classic.c +++ b/cli_classic.c @@ -117,6 +117,7 @@ int cli_classic(int argc, char *argv[]) #endif int operation_specified = 0; int i; + int ret = 0; static const char optstring[] = "r:Rw:v:nVEfc:m:l:i:p:Lzh"; static const struct option long_options[] = { @@ -232,8 +233,14 @@ int cli_classic(int argc, char *argv[]) cli_classic_abort_usage(); break; case 'i': + /* FIXME: -l has to be specified before -i. */ tempstr = strdup(optarg); - find_romentry(tempstr); + if (find_romentry(tempstr)) { + fprintf(stderr, "Error: image %s not found in " + "layout file or -i specified before " + "-l\n", tempstr); + cli_classic_abort_usage(); + } break; case 'L': if (++operation_specified > 1) { @@ -313,6 +320,11 @@ int cli_classic(int argc, char *argv[]) } } + if (optind < argc) { + fprintf(stderr, "Error: Extra parameter found.\n"); + cli_classic_abort_usage(); + } + /* FIXME: Print the actions flashrom will take. */ if (list_supported) { @@ -327,11 +339,6 @@ int cli_classic(int argc, char *argv[]) } #endif - if (optind < argc) { - fprintf(stderr, "Error: Extra parameter found.\n"); - cli_classic_abort_usage(); - } - #if CONFIG_INTERNAL == 1 if ((programmer != PROGRAMMER_INTERNAL) && (lb_part || lb_vendor)) { fprintf(stderr, "Error: --mainboard requires the internal " @@ -360,8 +367,8 @@ int cli_classic(int argc, char *argv[]) if (programmer_init(pparam)) { fprintf(stderr, "Error: Programmer initialization failed.\n"); - programmer_shutdown(); - exit(1); + ret = 1; + goto out_shutdown; } for (i = 0; i < ARRAY_SIZE(flashes); i++) { @@ -377,8 +384,8 @@ int cli_classic(int argc, char *argv[]) for (i = 0; i < chipcount; i++) printf(" %s", flashes[i].name); printf("\nPlease specify which chip to use with the -c option.\n"); - programmer_shutdown(); - exit(1); + ret = 1; + goto out_shutdown; } else if (!chipcount) { printf("No EEPROM/flash device found.\n"); if (!force || !chip_to_probe) { @@ -389,15 +396,14 @@ int cli_classic(int argc, char *argv[]) startchip = probe_flash(0, &flashes[0], 1); if (startchip == -1) { printf("Probing for flash chip '%s' failed.\n", chip_to_probe); - programmer_shutdown(); - exit(1); + ret = 1; + goto out_shutdown; } printf("Please note that forced reads most likely contain garbage.\n"); return read_flash_to_file(&flashes[0], filename); } - // FIXME: flash writes stay enabled! - programmer_shutdown(); - exit(1); + ret = 1; + goto out_shutdown; } fill_flash = &flashes[0]; @@ -409,22 +415,19 @@ int cli_classic(int argc, char *argv[]) (!force)) { fprintf(stderr, "Chip is too big for this programmer " "(-V gives details). Use --force to override.\n"); - programmer_shutdown(); - return 1; + ret = 1; + goto out_shutdown; } if (!(read_it | write_it | verify_it | erase_it)) { printf("No operations were specified.\n"); - // FIXME: flash writes stay enabled! - programmer_shutdown(); - exit(0); + goto out_shutdown; } if (!filename && !erase_it) { printf("Error: No filename specified.\n"); - // FIXME: flash writes stay enabled! - programmer_shutdown(); - exit(1); + ret = 1; + goto out_shutdown; } /* Always verify write operations unless -n is used. */ @@ -437,4 +440,8 @@ int cli_classic(int argc, char *argv[]) */ programmer_delay(100000); return doit(fill_flash, force, filename, read_it, write_it, erase_it, verify_it); + +out_shutdown: + programmer_shutdown(); + return ret; } -- cgit v1.1