From 23ec35553ab4f1e7f1509f09d63987f2251e3873 Mon Sep 17 00:00:00 2001 From: Antonio Ospite Date: Sat, 23 Mar 2013 22:40:25 +0100 Subject: [PATCH] am7xxx: fail if USB configuration or interface are not right Check the return values of libusb_set_configuration() and libusb_claim_interface(), this way it is easier to spot devices which require a different setting. --- src/am7xxx.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/am7xxx.c b/src/am7xxx.c index 83d9a91..c080660 100644 --- a/src/am7xxx.c +++ b/src/am7xxx.c @@ -598,8 +598,28 @@ static int scan_devices(am7xxx_context *ctx, scan_op op, goto out; } - libusb_set_configuration((*dev)->usb_device, 2); - libusb_claim_interface((*dev)->usb_device, 0); + /* XXX, the device is now open, if any + * of the calls below fail we need to + * close it again before bailing out. + */ + + ret = libusb_set_configuration((*dev)->usb_device, 2); + if (ret < 0) { + debug(ctx, "libusb_set_configuration failed\n"); + debug(ctx, "Cannot set configuration 2\n"); + goto out_libusb_close; + } + + ret = libusb_claim_interface((*dev)->usb_device, 0); + if (ret < 0) { + debug(ctx, "libusb_claim_interface failed\n"); + debug(ctx, "Cannot claim interface 0\n"); +out_libusb_close: + libusb_close((*dev)->usb_device); + (*dev)->usb_device = NULL; + goto out; + } + goto out; } current_index++; -- 2.1.4