[Pcsclite-cvs-commit] Drivers/ccid/src ccid_usb.c,1.21,1.22
rousseau@haydn.debian.org
rousseau@haydn.debian.org
Update of /cvsroot/pcsclite/Drivers/ccid/src
In directory haydn:/tmp/cvs-serv17446
Modified Files:
ccid_usb.c
Log Message:
add support for the libusb naming scheme: usb:%04x/%04x:libusb:%s
Index: ccid_usb.c
===================================================================
RCS file: /cvsroot/pcsclite/Drivers/ccid/src/ccid_usb.c,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -d -r1.21 -r1.22
--- ccid_usb.c 6 Apr 2004 13:15:34 -0000 1.21
+++ ccid_usb.c 8 Apr 2004 14:35:57 -0000 1.22
@@ -113,12 +113,14 @@
int vendorID, productID;
char infofile[FILENAME_MAX];
int device_vendor, device_product;
+ char *dirname = NULL, *filename = NULL;
DEBUG_COMM3("Lun: %X, Device: %s", lun, device);
/* device name specified */
if (device)
{
+ /* format: usb:%04x/%04x, vendor, product */
if (strncmp("usb:", device, 4) != 0)
{
DEBUG_CRITICAL2("device name does not start with \"usb:\": %s",
@@ -131,6 +133,33 @@
DEBUG_CRITICAL2("device name can't be parsed: %s", device);
return STATUS_UNSUCCESSFUL;
}
+
+ /* format usb:%04x/%04x:libusb:%s
+ * with %s set to %s:%s, dirname, filename */
+ if ((dirname = strstr(device, "libusb:")) != NULL)
+ {
+ /* dirname points to the first char after libusb: */
+ dirname += strlen("libusb:");
+
+ /* search the : (separation) char */
+ filename = strchr(dirname, ':');
+
+ if (filename)
+ {
+ /* end the dirname string */
+ *filename = '\0';
+
+ /* filename points to the first char after : */
+ filename++;
+ }
+ else
+ {
+ /* parse failed */
+ dirname = NULL;
+
+ DEBUG_CRITICAL2("can't parse using libusb scheme: %s", device);
+ }
+ }
}
if (busses == NULL)
@@ -214,6 +243,11 @@
/* any device on this bus */
for (dev = bus->devices; dev; dev = dev->next)
{
+ /* device defined by name? */
+ if (dirname && (strcmp(dirname, bus->dirname)
+ || strcmp(filename, dev->filename)))
+ continue;
+
if (dev->descriptor.idVendor == vendorID
&& dev->descriptor.idProduct == productID)
{