libusb_init() isn't guaranteed to succeed; it returns a (presumably)
non-zero error on failure. If it doesn't return 0, just give up - we
presumably don't have a valid libusb_context pointer, which is probably
what's causing crashes when we call libusb_get_device_list() on a system
with no usbfs mounted.
This fixes bug
3554749 in the tracker, and a bunch of upstream bugs.
unsigned char buf[96];
int cnt, i;
- libusb_init(&fdctx);
-
+ if (libusb_init(&fdctx) != 0) {
+ /*
+ * XXX - if this doesn't just mean "no USB file system mounted",
+ * perhaps we should report a real error rather than just
+ * saying "no CANUSB devices".
+ */
+ return 0;
+ }
+
cnt = libusb_get_device_list(fdctx,&devs);
for(i=0;i<cnt;i++)