projects
/
fw
/
stlink
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge pull request #397 from xor-gate/st-probe-libusb-fix
[fw/stlink]
/
src
/
stlink-usb.c
diff --git
a/src/stlink-usb.c
b/src/stlink-usb.c
index 8fed467ba7432c55aca960287fbacf5fcb80a675..36ac9687226cc40935191ac8407b1af0154ed3be 100644
(file)
--- 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;
stlink_t **_sldevs;
libusb_device *dev;
int i = 0;
+ int ret = 0;
size_t slcnt = 0;
size_t slcur = 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) {
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;
}
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;
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 (r
et
< 0) {
+
WLOG("failed to get libusb device descriptor\n
");
break;
}
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));
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);
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++;
}
slcur++;
}
+ /* Something went wrong */
+ if (ret < 0) {
+ free(_sldevs);
+ *sldevs = NULL;
+ return 0;
+ }
+
*sldevs = _sldevs;
return slcnt;
}
*sldevs = _sldevs;
return slcnt;
}