* ccid-driver.c (read_device_info): Fix segfault when usb device is not
authorDavid Shaw <dshaw@jabberwocky.com>
Sat, 11 Sep 2004 02:29:36 +0000 (02:29 +0000)
committerDavid Shaw <dshaw@jabberwocky.com>
Sat, 11 Sep 2004 02:29:36 +0000 (02:29 +0000)
accessible. (ccid_open_reader): Allow working with an even older version
of libusb (usb_busses global instead of usb_get_busses()).

g10/ChangeLog
g10/ccid-driver.c

index 9824018..6696c0a 100644 (file)
@@ -1,3 +1,10 @@
+2004-09-10  David Shaw  <dshaw@jabberwocky.com>
+
+       * ccid-driver.c (read_device_info): Fix segfault when usb device
+       is not accessible.
+       (ccid_open_reader): Allow working with an even older version of
+       libusb (usb_busses global instead of usb_get_busses()).
+
 2004-09-09  Werner Koch  <wk@g10code.com>
 
        * cardglue.h: Add members for CA fingerprints.
index 0fc1685..9847748 100644 (file)
@@ -423,6 +423,9 @@ read_device_info (ccid_driver_t handle, struct usb_device *dev)
       struct usb_config_descriptor *config = dev->config + cfg_no;
       int ifc_no;
 
+      if(!config)
+       continue;
+
       for (ifc_no=0; ifc_no < config->bNumInterfaces; ifc_no++)
         {
           struct usb_interface *interface = config->interface + ifc_no;
@@ -564,7 +567,12 @@ ccid_open_reader (ccid_driver_t *handle, int readerno)
   
   usb_find_busses();
   usb_find_devices();
+
+#ifdef HAVE_USB_GET_BUSSES
   busses = usb_get_busses();
+#else
+  busses = usb_busses;
+#endif
 
   for (bus = busses; bus; bus = bus->next) 
     {