diff options
Diffstat (limited to 'third_party/libusb')
-rw-r--r-- | third_party/libusb/README.chromium | 1 | ||||
-rw-r--r-- | third_party/libusb/darwin-sigfpe.patch | 22 | ||||
-rw-r--r-- | third_party/libusb/src/libusb/os/darwin_usb.c | 10 |
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 */ |