summaryrefslogtreecommitdiff
path: root/gusb/gusb-device.c
diff options
context:
space:
mode:
Diffstat (limited to 'gusb/gusb-device.c')
-rw-r--r--gusb/gusb-device.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/gusb/gusb-device.c b/gusb/gusb-device.c
index 0458451..f1135c8 100644
--- a/gusb/gusb-device.c
+++ b/gusb/gusb-device.c
@@ -1836,6 +1836,8 @@ g_usb_device_async_transfer_cb(struct libusb_transfer *transfer)
/* did request fail? */
ret = g_usb_device_libusb_status_to_gerror(transfer->status, &error);
if (!ret) {
+ if (req->event != NULL)
+ _g_usb_device_event_set_status(req->event, transfer->status);
g_task_return_error(task, error);
} else {
if (req->event != NULL) {
@@ -1866,6 +1868,8 @@ g_usb_device_control_transfer_cb(struct libusb_transfer *transfer)
/* did request fail? */
ret = g_usb_device_libusb_status_to_gerror(transfer->status, &error);
if (!ret) {
+ if (req->event != NULL)
+ _g_usb_device_event_set_status(req->event, transfer->status);
g_task_return_error(task, error);
} else {
memmove(req->data,
@@ -1988,6 +1992,16 @@ g_usb_device_control_transfer_async(GUsbDevice *self,
event_id);
return;
}
+ if (g_usb_device_event_get_status(event) != LIBUSB_TRANSFER_COMPLETED) {
+ g_usb_device_libusb_status_to_gerror(g_usb_device_event_get_status(event),
+ &error);
+ g_task_report_error(self,
+ callback,
+ user_data,
+ g_usb_device_control_transfer_async,
+ error);
+ return;
+ }
bytes = g_usb_device_event_get_bytes(event);
if (bytes == NULL) {
g_task_report_new_error(self,
@@ -2165,6 +2179,16 @@ g_usb_device_bulk_transfer_async(GUsbDevice *self,
event_id);
return;
}
+ if (g_usb_device_event_get_status(event) != LIBUSB_TRANSFER_COMPLETED) {
+ g_usb_device_libusb_status_to_gerror(g_usb_device_event_get_status(event),
+ &error);
+ g_task_report_error(self,
+ callback,
+ user_data,
+ g_usb_device_control_transfer_async,
+ error);
+ return;
+ }
bytes = g_usb_device_event_get_bytes(event);
if (bytes == NULL) {
g_task_report_new_error(self,
@@ -2331,6 +2355,16 @@ g_usb_device_interrupt_transfer_async(GUsbDevice *self,
event_id);
return;
}
+ if (g_usb_device_event_get_status(event) != LIBUSB_TRANSFER_COMPLETED) {
+ g_usb_device_libusb_status_to_gerror(g_usb_device_event_get_status(event),
+ &error);
+ g_task_report_error(self,
+ callback,
+ user_data,
+ g_usb_device_control_transfer_async,
+ error);
+ return;
+ }
bytes = g_usb_device_event_get_bytes(event);
if (bytes == NULL) {
g_task_report_new_error(self,