Index: patches/12_check_for_libusb_init_failures.patch |
=================================================================== |
--- patches/12_check_for_libusb_init_failures.patch (revision 0) |
+++ patches/12_check_for_libusb_init_failures.patch (revision 0) |
@@ -0,0 +1,76 @@ |
+Index: src/libusb1-glue.c |
+=================================================================== |
+--- src/libusb1-glue.c (revision 160213) |
++++ src/libusb1-glue.c (working copy) |
+@@ -84,7 +84,7 @@ |
+ static const int mtp_device_table_size = sizeof(mtp_device_table) / sizeof(LIBMTP_device_entry_t); |
+ |
+ // Local functions |
+-static void init_usb(); |
++static LIBMTP_error_number_t init_usb(); |
+ static void close_usb(PTP_USB* ptp_usb); |
+ static int find_interface_and_endpoints(libusb_device *dev, |
+ uint8_t *interface, |
+@@ -125,16 +125,20 @@ |
+ } |
+ |
+ |
+-static void init_usb() |
++static LIBMTP_error_number_t init_usb() |
+ { |
+ /* |
+ * Some additional libusb debugging please. |
+ * We use the same level debug between MTP and USB. |
+ */ |
+- libusb_init(NULL); |
++ if (libusb_init(NULL) < 0) { |
++ LIBMTP_ERROR("Libusb1 init failed\n"); |
++ return LIBMTP_ERROR_USB_LAYER; |
++ } |
+ |
+ if ((LIBMTP_debug & LIBMTP_DEBUG_USB) != 0) |
+ libusb_set_debug(NULL,9); |
++ return LIBMTP_ERROR_NONE; |
+ } |
+ |
+ /** |
+@@ -478,8 +482,11 @@ |
+ ssize_t nrofdevs; |
+ libusb_device **devs = NULL; |
+ int ret, i; |
++ LIBMTP_error_number_t init_usb_ret; |
+ |
+- init_usb(); |
++ init_usb_ret = init_usb(); |
++ if (init_usb_ret != LIBMTP_ERROR_NONE) |
++ return init_usb_ret; |
+ |
+ nrofdevs = libusb_get_device_list (NULL, &devs); |
+ for (i = 0; i < nrofdevs ; i++) { |
+@@ -551,8 +558,11 @@ |
+ ssize_t nrofdevs; |
+ libusb_device **devs = NULL; |
+ int i; |
++ LIBMTP_error_number_t init_usb_ret; |
+ |
+- init_usb(); |
++ init_usb_ret = init_usb(); |
++ if (init_usb_ret != LIBMTP_ERROR_NONE) |
++ return 0; |
+ |
+ nrofdevs = libusb_get_device_list (NULL, &devs); |
+ for (i = 0; i < nrofdevs ; i++ ) { |
+@@ -1904,9 +1914,12 @@ |
+ ssize_t nrofdevs; |
+ libusb_device **devs = NULL; |
+ struct libusb_device_descriptor desc; |
++ LIBMTP_error_number_t init_usb_ret; |
+ |
+ /* See if we can find this raw device again... */ |
+- init_usb(); |
++ init_usb_ret = init_usb(); |
++ if (init_usb_ret != LIBMTP_ERROR_NONE) |
++ return init_usb_ret; |
+ |
+ nrofdevs = libusb_get_device_list (NULL, &devs); |
+ for (i = 0; i < nrofdevs ; i++) { |