Commit 24be7518 authored by NiteHawk's avatar NiteHawk Committed by GitHub
Browse files

Merge pull request #87 from n1tehawk/contrib

fel: Improve on handling invalid options
parents e31cbf86 0146dd4a
...@@ -41,7 +41,7 @@ When called with no arguments, _sunxi-fel_ will display a short usage summary. ...@@ -41,7 +41,7 @@ When called with no arguments, _sunxi-fel_ will display a short usage summary.
_Note:_ Unless you select a specific device using the `--dev` or `--sid` _Note:_ Unless you select a specific device using the `--dev` or `--sid`
options, the tool will access the first Allwinner device (in FEL mode) that it options, the tool will access the first Allwinner device (in FEL mode) that it
finds. You can print a list of all FEL devices currently connected/detected finds. You can print a list of all FEL devices currently connected/detected
with `./sunxi-fel --list`. with `./sunxi-fel --list --verbose`.
### fel-gpio ### fel-gpio
Simple wrapper (script) around `fel-pio` and `sunxi-fel` Simple wrapper (script) around `fel-pio` and `sunxi-fel`
......
...@@ -1044,6 +1044,19 @@ int main(int argc, char **argv) ...@@ -1044,6 +1044,19 @@ int main(int argc, char **argv)
argv += 1; argv += 1;
} }
/*
* If any option-style arguments remain (starting with '-') we know that
* we won't recognize them later (at best yielding "Invalid command").
* However this would only happen _AFTER_ trying to open a FEL device,
* which might fail with "Allwinner USB FEL device not found". To avoid
* confusing the user, bail out here - with a more descriptive message.
*/
int i;
for (i = 1; i < argc; i++)
if (*argv[i] == '-')
pr_fatal("Invalid option %s\n", argv[i]);
/* Process options that don't require a FEL device handle */
if (device_list) if (device_list)
felusb_list_devices(); /* and exit program afterwards */ felusb_list_devices(); /* and exit program afterwards */
if (sid_arg) { if (sid_arg) {
...@@ -1055,8 +1068,13 @@ int main(int argc, char **argv) ...@@ -1055,8 +1068,13 @@ int main(int argc, char **argv)
pr_info("Selecting FEL device %03d:%03d by SID\n", busnum, devnum); pr_info("Selecting FEL device %03d:%03d by SID\n", busnum, devnum);
} }
/*
* Open FEL device - either specified by busnum:devnum, or
* the first one matching the given USB vendor/procduct ID.
*/
handle = feldev_open(busnum, devnum, AW_USB_VENDOR_ID, AW_USB_PRODUCT_ID); handle = feldev_open(busnum, devnum, AW_USB_VENDOR_ID, AW_USB_PRODUCT_ID);
/* Handle command-style arguments, in order of appearance */
while (argc > 1 ) { while (argc > 1 ) {
int skip = 1; int skip = 1;
...@@ -1138,8 +1156,7 @@ int main(int argc, char **argv) ...@@ -1138,8 +1156,7 @@ int main(int argc, char **argv)
printf("Warning: \"uboot\" command failed to detect image! Can't execute U-Boot.\n"); printf("Warning: \"uboot\" command failed to detect image! Can't execute U-Boot.\n");
skip=2; skip=2;
} else { } else {
fprintf(stderr,"Invalid command %s\n", argv[1]); pr_fatal("Invalid command %s\n", argv[1]);
exit(1);
} }
argc-=skip; argc-=skip;
argv+=skip; argv+=skip;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment