diff options
author | Nathan Hjelm <hjelmn@mac.com> | 2009-09-11 18:00:29 +0100 |
---|---|---|
committer | Daniel Drake <dsd@gentoo.org> | 2009-09-11 18:00:29 +0100 |
commit | fe0d8dce1ed704915d501e7da700440c78144211 (patch) | |
tree | 4cfadb3e8712d8f6a94f98ecab1388eae340f11c /libusb | |
parent | f46716f42040986203fa6e873bfdabe1be2900ec (diff) | |
download | libusb-fe0d8dce1ed704915d501e7da700440c78144211.tar.gz |
Darwin: handle overflows
Diffstat (limited to 'libusb')
-rw-r--r-- | libusb/os/darwin_usb.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/libusb/os/darwin_usb.c b/libusb/os/darwin_usb.c index 2ced118..9c64b60 100644 --- a/libusb/os/darwin_usb.c +++ b/libusb/os/darwin_usb.c @@ -81,6 +81,8 @@ static char *darwin_error_str (int result) { return "transaction aborted"; case kIOReturnNotResponding: return "device not responding"; + case kIOReturnOverrun: + return "data overrun"; default: return "unknown error"; } @@ -1300,12 +1302,17 @@ static void darwin_bulk_callback (struct usbi_transfer *itransfer, kern_return_t usbi_handle_transfer_cancellation(itransfer); return; case kIOUSBPipeStalled: - _usbi_log (ITRANSFER_CTX (itransfer), LOG_LEVEL_WARNING, "unsupported control request"); + _usbi_log (ITRANSFER_CTX (itransfer), LOG_LEVEL_WARNING, "bulk error. pipe is stalled"); status = LIBUSB_TRANSFER_STALL; break; + case kIOReturnOverrun: + _usbi_log (ITRANSFER_CTX (itransfer), LOG_LEVEL_ERROR, "bulk error. data overrun", darwin_error_str (result)); + status = LIBUSB_TRANSFER_OVERFLOW; + + break; default: - _usbi_log (ITRANSFER_CTX (itransfer), LOG_LEVEL_ERROR, "control error = %s", darwin_error_str (result)); + _usbi_log (ITRANSFER_CTX (itransfer), LOG_LEVEL_ERROR, "bulk error = %s (value = 0x%08x)", darwin_error_str (result), result); status = LIBUSB_TRANSFER_ERROR; } @@ -1341,6 +1348,11 @@ static void darwin_isoc_callback (struct usbi_transfer *itransfer, kern_return_t status = LIBUSB_TRANSFER_STALL; break; + case kIOReturnOverrun: + _usbi_log (ITRANSFER_CTX (itransfer), LOG_LEVEL_ERROR, "bulk error. data overrun", darwin_error_str (result)); + status = LIBUSB_TRANSFER_OVERFLOW; + + break; default: _usbi_log (ITRANSFER_CTX (itransfer), LOG_LEVEL_ERROR, "control error = %s", darwin_error_str (result)); status = LIBUSB_TRANSFER_ERROR; |