Utilise str_busdev_eq() in dfu.c

This commit is contained in:
stefanrueger
2025-10-23 15:23:16 +02:00
parent d759b35a71
commit 37a52cc401

View File

@@ -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:<bus>:<device>\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 <pid> in config or USB address via -P usb:<bus>:<dev>\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) {