diff --git a/src/dfu.c b/src/dfu.c index 6bf51a56..1cb15747 100644 --- a/src/dfu.c +++ b/src/dfu.c @@ -92,8 +92,7 @@ static char *get_usb_string(usb_dev_handle *dev_handle, int index); struct dfu_dev *dfu_open(const char *port_spec) { struct dfu_dev *dfu; - char *bus_name = NULL; - char *dev_name = NULL; + char *bus_name = NULL, *dev_name = NULL; /* The following USB device spec parsing code was copied from usbtiny.c. The * expected format is "usb:BUS:DEV" where BUS and DEV are the bus and device @@ -101,16 +100,15 @@ struct dfu_dev *dfu_open(const char *port_spec) { * function, where we actually open the device. */ - if(!str_starts(port_spec, "usb")) { - pmsg_error("invalid port specification %s for USB device\n", port_spec); + if(!str_starts(port_spec, "usb:") && !str_eq(port_spec, "usb")) { + pmsg_error("port name %s must be usb::\n", port_spec); return NULL; } if(':' == port_spec[3]) { bus_name = mmt_strdup(port_spec + 3 + 1); - dev_name = strchr(bus_name, ':'); - if(NULL != dev_name) + if((dev_name = strchr(bus_name, ':'))) *dev_name++ = '\0'; } @@ -148,7 +146,7 @@ int dfu_init(struct dfu_dev *dfu, unsigned short vid, unsigned short pid) { */ if(pid == 0 && dfu->dev_name == NULL) { - pmsg_error("no DFU support for part; specify PID in config or USB address (via -P) to override\n"); + pmsg_error("no DFU support for part; specify in config or USB address via -P usb::\n"); return -1; } @@ -164,10 +162,10 @@ int dfu_init(struct dfu_dev *dfu, unsigned short vid, unsigned short pid) { for(bus = usb_busses; !found && bus != NULL; bus = bus->next) { for(dev = bus->devices; !found && dev != NULL; dev = dev->next) { - if(dfu->bus_name != NULL && !str_eq(bus->dirname, dfu->bus_name)) + if(dfu->bus_name && !str_busdev_eq(bus->dirname, dfu->bus_name)) continue; - if(dfu->dev_name != NULL) { - if(!str_eq(dev->filename, dfu->dev_name)) + if(dfu->dev_name) { + if(!str_busdev_eq(dev->filename, dfu->dev_name)) continue; } else if(vid != dev->descriptor.idVendor) continue; @@ -223,14 +221,10 @@ int dfu_init(struct dfu_dev *dfu, unsigned short vid, unsigned short pid) { void dfu_close(struct dfu_dev *dfu) { if(dfu->dev_handle != NULL) usb_close(dfu->dev_handle); - if(dfu->bus_name != NULL) - mmt_free(dfu->bus_name); - if(dfu->manf_str != NULL) - mmt_free(dfu->manf_str); - if(dfu->prod_str != NULL) - mmt_free(dfu->prod_str); - if(dfu->serno_str != NULL) - mmt_free(dfu->serno_str); + mmt_free(dfu->bus_name); + mmt_free(dfu->manf_str); + mmt_free(dfu->prod_str); + mmt_free(dfu->serno_str); } int dfu_getstatus(struct dfu_dev *dfu, struct dfu_status *status) {