X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fstlink-usb.c;fp=src%2Fstlink-usb.c;h=36ac9687226cc40935191ac8407b1af0154ed3be;hb=a86d51b4699a07d4bfb0a2f1678b1f29c59530ec;hp=8fed467ba7432c55aca960287fbacf5fcb80a675;hpb=78430e718c53d45d0ef2acbc23c1b3f92c462f84;p=fw%2Fstlink diff --git a/src/stlink-usb.c b/src/stlink-usb.c index 8fed467..36ac968 100644 --- a/src/stlink-usb.c +++ b/src/stlink-usb.c @@ -877,6 +877,7 @@ static size_t stlink_probe_usb_devs(libusb_device **devs, stlink_t **sldevs[]) { stlink_t **_sldevs; libusb_device *dev; int i = 0; + int ret = 0; size_t slcnt = 0; size_t slcur = 0; @@ -885,7 +886,7 @@ static size_t stlink_probe_usb_devs(libusb_device **devs, stlink_t **sldevs[]) { struct libusb_device_descriptor desc; int r = libusb_get_device_descriptor(dev, &desc); if (r < 0) { - fprintf(stderr, "failed to get device descriptor"); + WLOG("failed to get libusb device descriptor\n"); break; } @@ -907,9 +908,9 @@ static size_t stlink_probe_usb_devs(libusb_device **devs, stlink_t **sldevs[]) { i = 0; while ((dev = devs[i++]) != NULL) { struct libusb_device_descriptor desc; - int r = libusb_get_device_descriptor(dev, &desc); - if (r < 0) { - fprintf(stderr, "failed to get device descriptor"); + ret = libusb_get_device_descriptor(dev, &desc); + if (ret < 0) { + WLOG("failed to get libusb device descriptor\n"); break; } @@ -921,7 +922,11 @@ static size_t stlink_probe_usb_devs(libusb_device **devs, stlink_t **sldevs[]) { char serial[13]; memset(serial, 0, sizeof(serial)); - libusb_open(dev, &handle); + ret = libusb_open(dev, &handle); + if (ret < 0) { + WLOG("failed to get libusb device descriptor\n"); + break; + } libusb_get_string_descriptor_ascii(handle, desc.iSerialNumber, (unsigned char *)&serial, sizeof(serial)); libusb_close(handle); @@ -934,6 +939,13 @@ static size_t stlink_probe_usb_devs(libusb_device **devs, stlink_t **sldevs[]) { slcur++; } + /* Something went wrong */ + if (ret < 0) { + free(_sldevs); + *sldevs = NULL; + return 0; + } + *sldevs = _sldevs; return slcnt; }