[Pcsclite-cvs-commit] CVS Drivers/ccid/src
CVS User rousseau
ludovic.rousseau@free.fr
Sun, 20 Feb 2005 07:34:43 -0700
Update of /cvsroot/pcsclite/Drivers/ccid/src
In directory haydn:/tmp/cvs-serv15780
Modified Files:
ccid_usb.c
Log Message:
add an "interface field" in _usbDevice. This value is set in OpenUSB()
and used in CloseUSB().
The struct usb_device structure is half "corrupted" after the USB device
is removed and we wanted to use it when when closing the driver after a
reader removal. This caused a crash with libusb 0.1.10.
--- /cvsroot/pcsclite/Drivers/ccid/src/ccid_usb.c 2005/02/20 14:03:07 1.45
+++ /cvsroot/pcsclite/Drivers/ccid/src/ccid_usb.c 2005/02/20 14:34:42 1.46
@@ -18,7 +18,7 @@
*/
/*
- * $Id: ccid_usb.c,v 1.45 2005/02/20 14:03:07 rousseau Exp $
+ * $Id: ccid_usb.c,v 1.46 2005/02/20 14:34:42 rousseau Exp $
*/
#define __CCID_USB__
@@ -71,6 +71,7 @@
{
usb_dev_handle *handle;
struct usb_device *dev;
+ int interface;
/*
* Endpoints
@@ -386,6 +387,7 @@
/* store device information */
usbDevice[reader_index].handle = dev_handle;
usbDevice[reader_index].dev = dev;
+ usbDevice[reader_index].interface = interface;
/* CCID common informations */
usbDevice[reader_index].ccid.real_bSeq = 0;
@@ -498,9 +500,6 @@
****************************************************************************/
status_t CloseUSB(unsigned int reader_index)
{
- struct usb_interface *usb_interface;
- int interface;
-
/* device not opened */
if (usbDevice[reader_index].dev == NULL)
return STATUS_UNSUCCESSFUL;
@@ -509,20 +508,17 @@
usbDevice[reader_index].dev->bus->dirname,
usbDevice[reader_index].dev->filename);
- usb_interface = get_ccid_usb_interface(usbDevice[reader_index].dev);
- interface = usb_interface ?
- usb_interface->altsetting->bInterfaceNumber :
- usbDevice[reader_index].dev->config->interface->altsetting->bInterfaceNumber;
-
/* reset so that bSeq starts at 0 again */
usb_reset(usbDevice[reader_index].handle);
- usb_release_interface(usbDevice[reader_index].handle, interface);
+ usb_release_interface(usbDevice[reader_index].handle,
+ usbDevice[reader_index].interface);
usb_close(usbDevice[reader_index].handle);
/* mark the resource unused */
usbDevice[reader_index].handle = NULL;
usbDevice[reader_index].dev = NULL;
+ usbDevice[reader_index].interface = 0;
return STATUS_SUCCESS;
} /* CloseUSB */