From fe0d8dce1ed704915d501e7da700440c78144211 Mon Sep 17 00:00:00 2001 From: Nathan Hjelm Date: Fri, 11 Sep 2009 18:00:29 +0100 Subject: [PATCH] Darwin: handle overflows --- libusb/os/darwin_usb.c | 16 ++++++++++++++-- 1 file 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; -- 2.7.4