From 16fca81b3b23ddf29e57e6af652c78e7b94c735e Mon Sep 17 00:00:00 2001 From: heck Date: Wed, 9 Aug 2023 22:27:15 +0200 Subject: [PATCH] Fix bug, dont ask. --- src/ch341eeprom.c | 46 ++++++++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/src/ch341eeprom.c b/src/ch341eeprom.c index d29f63e..f20690e 100644 --- a/src/ch341eeprom.c +++ b/src/ch341eeprom.c @@ -48,13 +48,20 @@ int main(int argc, char **argv) { static char usage_msg[] = "Usage:\n" \ + " fvflash [options] [operation] filename\n" \ + " writes filename into fv1 (must be in bin format)\n\n" + + "operation:\n"\ + " default operation is write fv1\n"\ + " -e, --erase erase fv1 (fill with 0xff)\n" \ + " -r, --read read fv1 and save image to filename\n\n" + + "options:\n"\ " -h, --help display this text\n" \ " -d, --debug debug output\n" \ - " -s, --size size of EEPROM {24c32|24c64} default=24c32\n" \ - " -e, --erase erase EEPROM (fill with 0xff)\n" \ - " -w, --write write EEPROM with image from filename\n" \ - " -r, --read read EEPROM and save image to filename\n\n" \ - "Example: fvflash bootrom.bin\n"; + " -s, --size size of fv1 {24c32|24c64} default=24c32\n\n" \ + + "Example: fvflash bank.bin - writes bank.bin into fv1\n"; static struct option longopts[] = { {"help", no_argument, 0, 'h'}, @@ -65,6 +72,7 @@ int main(int argc, char **argv) { {0, 0, 0, 0} }; + int32_t last_optidx = 0; while (TRUE) { int32_t optidx = 0; int8_t c = getopt_long(argc,argv,"hdes:r:", longopts, &optidx); @@ -97,30 +105,28 @@ int main(int argc, char **argv) { } break; default: - if(!operation) { - operation = 'w'; - filename = (char *) malloc(strlen(argv[optidx])+1); - strcpy(filename, optarg); - } else { - fprintf(stderr, "Conflicting command line options\n"); - goto shutdown; - } - break; - case '?': fprintf(stdout, "%s", version_msg); + case '?': fprintf(stdout, "%s\bn", version_msg); fprintf(stderr, "%s", usage_msg); goto shutdown; } + last_optidx = optidx; + } + + if(!operation) { + if(argc < 2) { + fprintf(stderr, "%s", usage_msg); + goto shutdown; + } + printf("writing %s\n", argv[argc-1]); + operation = 'w'; + filename = (char *) malloc(strlen(argv[argc-1])+1); + strcpy(filename, argv[argc-1]); } debugout = (debug == TRUE) ? stdout : fopen("/dev/null","w"); verbout = (verbose == TRUE) ? stdout : fopen("/dev/null","w"); fprintf(debugout, "Debug Enabled\n"); - if(!operation) { - fprintf(stderr, "%s\n%s", version_msg, usage_msg); - goto shutdown; - } - if(eepromsize <= 0) { fprintf(stderr, "Invalid EEPROM size\n"); goto shutdown;