summaryrefslogtreecommitdiff
path: root/third_party/libusb
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/libusb')
-rw-r--r--third_party/libusb/README.chromium1
-rw-r--r--third_party/libusb/darwin-sigfpe.patch22
-rw-r--r--third_party/libusb/src/libusb/os/darwin_usb.c10
3 files changed, 31 insertions, 2 deletions
diff --git a/third_party/libusb/README.chromium b/third_party/libusb/README.chromium
index b0e8ada6ad..348d919814 100644
--- a/third_party/libusb/README.chromium
+++ b/third_party/libusb/README.chromium
@@ -15,3 +15,4 @@ Local Modifications:
- Exposing an API (libusb_interrupt_handle_event) to explicitly interrupt
libusb_handle_event.
- windows-build.patch has been applied.
+- darwin-sigfpe.patch has been applied.
diff --git a/third_party/libusb/darwin-sigfpe.patch b/third_party/libusb/darwin-sigfpe.patch
new file mode 100644
index 0000000000..3c74db1857
--- /dev/null
+++ b/third_party/libusb/darwin-sigfpe.patch
@@ -0,0 +1,22 @@
+diff --git a/libusb/os/darwin_usb.c b/libusb/os/darwin_usb.c
+index b0ee5b2..fe40899 100644
+--- a/libusb/os/darwin_usb.c
++++ b/libusb/os/darwin_usb.c
+@@ -1449,8 +1449,14 @@ static int submit_bulk_transfer(struct usbi_transfer *itransfer) {
+
+ cInterface = &priv->interfaces[iface];
+
+- (*(cInterface->interface))->GetPipeProperties (cInterface->interface, pipeRef, &direction, &number,
+- &transferType, &maxPacketSize, &interval);
++ ret = (*(cInterface->interface))->GetPipeProperties (cInterface->interface, pipeRef, &direction, &number,
++ &transferType, &maxPacketSize, &interval);
++
++ if (ret) {
++ usbi_err (TRANSFER_CTX (transfer), "bulk transfer failed (dir = %s): %s (code = 0x%08x)", IS_XFERIN(transfer) ? "In" : "Out",
++ darwin_error_str(ret), ret);
++ return darwin_to_libusb (ret);
++ }
+
+ if (0 != (transfer->length % maxPacketSize)) {
+ /* do not need a zero packet */
+
diff --git a/third_party/libusb/src/libusb/os/darwin_usb.c b/third_party/libusb/src/libusb/os/darwin_usb.c
index a24558cb59..3f315e84be 100644
--- a/third_party/libusb/src/libusb/os/darwin_usb.c
+++ b/third_party/libusb/src/libusb/os/darwin_usb.c
@@ -1448,8 +1448,14 @@ static int submit_bulk_transfer(struct usbi_transfer *itransfer) {
cInterface = &priv->interfaces[iface];
- (*(cInterface->interface))->GetPipeProperties (cInterface->interface, pipeRef, &direction, &number,
- &transferType, &maxPacketSize, &interval);
+ ret = (*(cInterface->interface))->GetPipeProperties (cInterface->interface, pipeRef, &direction, &number,
+ &transferType, &maxPacketSize, &interval);
+
+ if (ret) {
+ usbi_err (TRANSFER_CTX (transfer), "bulk transfer failed (dir = %s): %s (code = 0x%08x)", IS_XFERIN(transfer) ? "In" : "Out",
+ darwin_error_str(ret), ret);
+ return darwin_to_libusb (ret);
+ }
if (0 != (transfer->length % maxPacketSize)) {
/* do not need a zero packet */