mirror of
https://github.com/avrdudes/avrdude.git
synced 2026-06-02 09:46:34 +03:00
Match bus:device for usbasp using str_busdev_eq()
This commit is contained in:
27
src/usbasp.c
27
src/usbasp.c
@@ -418,22 +418,19 @@ static int usbasp_transmit(const PROGRAMMER *pgm,
|
||||
return nbytes;
|
||||
}
|
||||
|
||||
static int check_for_port_argument_match(const char *port, char *bus, char *device, char *serial_num) {
|
||||
static int check_for_port_argument_match(const char *port, const char *bus,
|
||||
const char *device, const char *serial_num) {
|
||||
|
||||
pmsg_notice("found USBasp with bus:device = %s:%s, serial_number = %s\n", bus, device, serial_num);
|
||||
const size_t usb_len = strlen("usb");
|
||||
|
||||
if(str_starts(port, "usb") && ':' == port[usb_len]) {
|
||||
port += usb_len + 1;
|
||||
char *colon_pointer = strchr(port, ':');
|
||||
char *dev_name = strchr(port, ':');
|
||||
|
||||
if(dev_name) // Compare with bus:device
|
||||
return str_busdev_eq(port, bus) && str_busdev_eq(dev_name+1, device);
|
||||
|
||||
if(colon_pointer) {
|
||||
// Value contains ':' character. Compare with bus/device.
|
||||
if(strncmp(port, bus, colon_pointer - port))
|
||||
return 0;
|
||||
port = colon_pointer + 1;
|
||||
return str_eq(port, device);
|
||||
}
|
||||
// Serial number case
|
||||
return *port && str_ends(serial_num, port);
|
||||
}
|
||||
@@ -514,12 +511,11 @@ static int usbOpenDevice(const PROGRAMMER *pgm, libusb_device_handle **device, i
|
||||
// -P option given
|
||||
libusb_get_string_descriptor_ascii(handle, descriptor.iSerialNumber,
|
||||
(unsigned char *) string, sizeof(string));
|
||||
char bus_num[21];
|
||||
|
||||
sprintf(bus_num, "%d", libusb_get_bus_number(dev));
|
||||
char dev_addr[21];
|
||||
char bus_num[21], dev_addr[21];
|
||||
sprintf(bus_num, "%03d", libusb_get_bus_number(dev));
|
||||
sprintf(dev_addr, "%03d", libusb_get_device_address(dev));
|
||||
|
||||
sprintf(dev_addr, "%d", libusb_get_device_address(dev));
|
||||
if(!check_for_port_argument_match(port, bus_num, dev_addr, string))
|
||||
errorCode = USB_ERROR_NOTFOUND;
|
||||
}
|
||||
@@ -644,12 +640,11 @@ static int usbasp_open(PROGRAMMER *pgm, const char *port) {
|
||||
USBASP_OLD_PID, "USBasp", port) == 0) {
|
||||
|
||||
cx->usb_access_error = 0;
|
||||
// Found USBasp with old IDs
|
||||
pmsg_error("found USB device USBasp with old VID/PID; please update firmware of USBasp\n");
|
||||
pmsg_error("found USBasp with old VID/PID; please update its firmware\n");
|
||||
return 0;
|
||||
}
|
||||
/*
|
||||
* original USBasp is specified in config file, so no need to check it
|
||||
* Original USBasp is specified in config file, so no need to check it
|
||||
* again here; no alternative found => fall through to generic error
|
||||
* message
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user