X-Git-Url: https://git.ao2.it/libam7xxx.git/blobdiff_plain/3fc490e6530865e1b33cd57c7a6bfcc9aff66ab6..23ec35553ab4f1e7f1509f09d63987f2251e3873:/src/am7xxx.c 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++;