diff --git a/src/usbasp.c b/src/usbasp.c index b58d62a5..21700566 100644 --- a/src/usbasp.c +++ b/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 */