# HG changeset patch # User Mychaela Falconia # Date 1694401150 0 # Node ID d682cac178c2732a3e93d017ccbc13a61450b664 # Parent a94bd400207679d13f7e344bbf4882489d2f8a97 fteeprom-erase: implement -d option for interface detach diff -r a94bd4002076 -r d682cac178c2 fteeprom/fteeprom-erase.c --- a/fteeprom/fteeprom-erase.c Mon Sep 11 02:48:22 2023 +0000 +++ b/fteeprom/fteeprom-erase.c Mon Sep 11 02:59:10 2023 +0000 @@ -19,17 +19,52 @@ #include "../libuwrap/open_close.h" #include "../libftmini/eeprom_func.h" +char *device_selector; +int detach_num; + +process_cmdline(argc, argv) + char **argv; +{ + int c; + extern int optind; + extern char *optarg; + + while ((c = getopt(argc, argv, "d:")) != EOF) { + switch (c) { + case 'd': + detach_num = atoi(optarg); + switch (detach_num) { + case 0: + case 1: + case 2: + case 4: + break; + default: + fprintf(stderr, "error: invalid -d argument\n"); + exit(1); + } + continue; + default: + /* error msg already printed */ + exit(1); + } + } + if (argc != optind + 1) { + fprintf(stderr, "usage: %s [options] device-selector\n", + argv[0]); + exit(1); + } + device_selector = argv[optind]; +} + main(argc, argv) char **argv; { struct usb_device *dev; usb_dev_handle *usbh; - if (argc != 2) { - fprintf(stderr, "usage: %s device-selector\n"); - exit(1); - } - dev = find_usbdev_by_desc_string(argv[1]); + process_cmdline(argc, argv); + dev = find_usbdev_by_desc_string(device_selector); if (!dev) { fprintf(stderr, "error: specified USB device not found\n"); exit(1); @@ -39,6 +74,8 @@ fprintf(stderr, "error: usb_open() failed\n"); exit(1); } + if (detach_num) + usbwrap_claim_all_ifs(usbh, detach_num); ftmini_erase_eeprom(usbh); usb_close(usbh); exit(0);