mirror of
https://github.com/avrdudes/avrdude.git
synced 2026-06-02 09:46:34 +03:00
Utilise str_busdev_eq() in dfu.c
This commit is contained in:
30
src/dfu.c
30
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:<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) {
|
||||
|
||||
Reference in New Issue
Block a user