diff options
author | Hans de Goede <hdegoede@redhat.com> | 2012-03-26 22:51:56 +0100 |
---|---|---|
committer | Pete Batard <pete@akeo.ie> | 2012-03-26 23:03:20 +0100 |
commit | a76f2eea59807eb6f3d6642e80ccb9844b5092e4 (patch) | |
tree | fd9b35d39a59cfcab2ff00d97cb5c6918306231d | |
parent | f18a081dd742f332511101a5dc715bd6b16cb92a (diff) | |
download | libusb-a76f2eea59807eb6f3d6642e80ccb9844b5092e4.tar.gz |
Linux: Fix handling of urb status codes
* Adds EOVERFLOW handling in handle_control_completion
* Removes handling of codes that can never occur on an iso urb
-rw-r--r-- | libusb/os/linux_usbfs.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/libusb/os/linux_usbfs.c b/libusb/os/linux_usbfs.c index 703d844..f9fa4cd 100644 --- a/libusb/os/linux_usbfs.c +++ b/libusb/os/linux_usbfs.c @@ -1978,6 +1978,7 @@ static int handle_bulk_completion(struct usbi_transfer *itransfer, case -ENOENT: /* cancelled */ case -ECONNRESET: break; + case -ENODEV: case -ESHUTDOWN: usbi_dbg("device removed"); tpriv->reap_status = LIBUSB_TRANSFER_NO_DEVICE; @@ -1996,6 +1997,8 @@ static int handle_bulk_completion(struct usbi_transfer *itransfer, case -ETIME: case -EPROTO: case -EILSEQ: + case -ECOMM: + case -ENOSR: usbi_dbg("low level error %d", urb->status); tpriv->reap_action = ERROR; goto cancel_remaining; @@ -2107,19 +2110,16 @@ static int handle_iso_completion(struct usbi_transfer *itransfer, case 0: break; case -ENOENT: /* cancelled */ + case -ECONNRESET: break; case -ESHUTDOWN: usbi_dbg("device removed"); status = LIBUSB_TRANSFER_NO_DEVICE; break; - case -ETIME: - case -EPROTO: - case -EILSEQ: - usbi_dbg("low-level USB error %d", urb->status); - break; default: usbi_warn(TRANSFER_CTX(transfer), "unrecognised urb status %d", urb->status); + status = LIBUSB_TRANSFER_ERROR; break; } @@ -2165,6 +2165,7 @@ static int handle_control_completion(struct usbi_transfer *itransfer, case -ENOENT: /* cancelled */ status = LIBUSB_TRANSFER_CANCELLED; break; + case -ENODEV: case -ESHUTDOWN: usbi_dbg("device removed"); status = LIBUSB_TRANSFER_NO_DEVICE; @@ -2173,9 +2174,15 @@ static int handle_control_completion(struct usbi_transfer *itransfer, usbi_dbg("unsupported control request"); status = LIBUSB_TRANSFER_STALL; break; + case -EOVERFLOW: + usbi_dbg("control overflow error"); + status = LIBUSB_TRANSFER_OVERFLOW; + break; case -ETIME: case -EPROTO: case -EILSEQ: + case -ECOMM: + case -ENOSR: usbi_dbg("low-level bus error occurred"); status = LIBUSB_TRANSFER_ERROR; break; |