Adapting to latest libusb-1.0 changes

Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
[dsd: remove config const qualifier and add freeing of config]
This commit is contained in:
Vasily Khoruzhick 2008-05-13 01:24:05 +03:00 committed by Daniel Drake
parent 63421e3fd6
commit aa7c8ae81e
2 changed files with 28 additions and 11 deletions
libfprint

View file

@ -356,16 +356,22 @@ static void register_drivers(void)
static struct fp_driver *find_supporting_driver(libusb_device *udev, static struct fp_driver *find_supporting_driver(libusb_device *udev,
const struct usb_id **usb_id) const struct usb_id **usb_id)
{ {
int ret;
GSList *elem = registered_drivers; GSList *elem = registered_drivers;
const struct libusb_device_descriptor *dsc = struct libusb_device_descriptor dsc;
libusb_get_device_descriptor(udev);
ret = libusb_get_device_descriptor(udev, &dsc);
if (ret < 0) {
fp_err("Failed to get device descriptor");
return NULL;
}
do { do {
struct fp_driver *drv = elem->data; struct fp_driver *drv = elem->data;
const struct usb_id *id; const struct usb_id *id;
for (id = drv->id_table; id->vendor; id++) for (id = drv->id_table; id->vendor; id++)
if (dsc->idVendor == id->vendor && dsc->idProduct == id->product) { if (dsc.idVendor == id->vendor && dsc.idProduct == id->product) {
fp_dbg("driver %s supports USB device %04x:%04x", fp_dbg("driver %s supports USB device %04x:%04x",
drv->name, id->vendor, id->product); drv->name, id->vendor, id->product);
*usb_id = id; *usb_id = id;

View file

@ -1106,7 +1106,7 @@ static void dev_deactivate(struct fp_img_dev *dev)
static int dev_init(struct fp_img_dev *dev, unsigned long driver_data) static int dev_init(struct fp_img_dev *dev, unsigned long driver_data)
{ {
const struct libusb_config_descriptor *config; struct libusb_config_descriptor *config;
const struct libusb_interface *iface = NULL; const struct libusb_interface *iface = NULL;
const struct libusb_interface_descriptor *iface_desc; const struct libusb_interface_descriptor *iface_desc;
const struct libusb_endpoint_descriptor *ep; const struct libusb_endpoint_descriptor *ep;
@ -1115,7 +1115,11 @@ static int dev_init(struct fp_img_dev *dev, unsigned long driver_data)
int r; int r;
/* Find fingerprint interface */ /* Find fingerprint interface */
config = libusb_get_config_descriptor(libusb_get_device(dev->udev)); r = libusb_get_config_descriptor(libusb_get_device(dev->udev), 0, &config);
if (r < 0) {
fp_err("Failed to get config descriptor");
return r;
}
for (i = 0; i < config->bNumInterfaces; i++) { for (i = 0; i < config->bNumInterfaces; i++) {
const struct libusb_interface *cur_iface = &config->interface[i]; const struct libusb_interface *cur_iface = &config->interface[i];
@ -1133,14 +1137,16 @@ static int dev_init(struct fp_img_dev *dev, unsigned long driver_data)
if (iface == NULL) { if (iface == NULL) {
fp_err("could not find interface"); fp_err("could not find interface");
return -ENODEV; r = -ENODEV;
goto out;
} }
/* Find/check endpoints */ /* Find/check endpoints */
if (iface_desc->bNumEndpoints != 2) { if (iface_desc->bNumEndpoints != 2) {
fp_err("found %d endpoints!?", iface_desc->bNumEndpoints); fp_err("found %d endpoints!?", iface_desc->bNumEndpoints);
return -ENODEV; r = -ENODEV;
goto out;
} }
ep = &iface_desc->endpoint[0]; ep = &iface_desc->endpoint[0];
@ -1148,7 +1154,8 @@ static int dev_init(struct fp_img_dev *dev, unsigned long driver_data)
|| (ep->bmAttributes & LIBUSB_TRANSFER_TYPE_MASK) != || (ep->bmAttributes & LIBUSB_TRANSFER_TYPE_MASK) !=
LIBUSB_TRANSFER_TYPE_INTERRUPT) { LIBUSB_TRANSFER_TYPE_INTERRUPT) {
fp_err("unrecognised interrupt endpoint"); fp_err("unrecognised interrupt endpoint");
return -ENODEV; r = -ENODEV;
goto out;
} }
ep = &iface_desc->endpoint[1]; ep = &iface_desc->endpoint[1];
@ -1156,7 +1163,8 @@ static int dev_init(struct fp_img_dev *dev, unsigned long driver_data)
|| (ep->bmAttributes & LIBUSB_TRANSFER_TYPE_MASK) != || (ep->bmAttributes & LIBUSB_TRANSFER_TYPE_MASK) !=
LIBUSB_TRANSFER_TYPE_BULK) { LIBUSB_TRANSFER_TYPE_BULK) {
fp_err("unrecognised bulk endpoint"); fp_err("unrecognised bulk endpoint");
return -ENODEV; r = -ENODEV;
goto out;
} }
/* Device looks like a supported reader */ /* Device looks like a supported reader */
@ -1164,7 +1172,7 @@ static int dev_init(struct fp_img_dev *dev, unsigned long driver_data)
r = libusb_claim_interface(dev->udev, iface_desc->bInterfaceNumber); r = libusb_claim_interface(dev->udev, iface_desc->bInterfaceNumber);
if (r < 0) { if (r < 0) {
fp_err("interface claim failed"); fp_err("interface claim failed");
return r; goto out;
} }
urudev = g_malloc0(sizeof(*urudev)); urudev = g_malloc0(sizeof(*urudev));
@ -1173,7 +1181,10 @@ static int dev_init(struct fp_img_dev *dev, unsigned long driver_data)
AES_set_encrypt_key(crkey, 128, &urudev->aeskey); AES_set_encrypt_key(crkey, 128, &urudev->aeskey);
dev->priv = urudev; dev->priv = urudev;
fpi_imgdev_open_complete(dev, 0); fpi_imgdev_open_complete(dev, 0);
return 0;
out:
libusb_free_config_descriptor(config);
return r;
} }
static void dev_deinit(struct fp_img_dev *dev) static void dev_deinit(struct fp_img_dev *dev)