summaryrefslogtreecommitdiff
path: root/libusb/os/linux_usbfs.c
diff options
context:
space:
mode:
authorDavid Engraf <david.engraf@netcom.eu>2008-05-19 15:16:32 +0100
committerDaniel Drake <dsd@gentoo.org>2008-05-19 15:16:32 +0100
commita345bacb6f07ebb2122402041a9e8092d4a20a4d (patch)
tree6fd3ed16eaff5a1f9c8943aaa15e7c822159a1bf /libusb/os/linux_usbfs.c
parente44396a458ecea9e5edd9a7577e617571c76860d (diff)
downloadlibusb-a345bacb6f07ebb2122402041a9e8092d4a20a4d.tar.gz
Linux: fix handling of ioctl failure
The return value of some ioctl commands in linux_usbfs.c are not handeled correct. The ioctl function returns != 0 and errno is set with the error code.
Diffstat (limited to 'libusb/os/linux_usbfs.c')
-rw-r--r--libusb/os/linux_usbfs.c30
1 files changed, 16 insertions, 14 deletions
diff --git a/libusb/os/linux_usbfs.c b/libusb/os/linux_usbfs.c
index 82f1ac8..7dc6b6c 100644
--- a/libusb/os/linux_usbfs.c
+++ b/libusb/os/linux_usbfs.c
@@ -1186,7 +1186,7 @@ static int submit_bulk_transfer(struct usbi_transfer *itransfer,
int tmp = ioctl(dpriv->fd, IOCTL_USBFS_DISCARDURB, &urbs[j]);
if (tmp == 0)
tpriv->awaiting_discard++;
- else if (tmp == -EINVAL)
+ else if (errno == EINVAL)
tpriv->awaiting_reap++;
else
usbi_warn("unrecognised discard return %d", tmp);
@@ -1340,7 +1340,7 @@ static int submit_iso_transfer(struct usbi_transfer *itransfer)
int tmp = ioctl(dpriv->fd, IOCTL_USBFS_DISCARDURB, urbs[j]);
if (tmp == 0)
tpriv->awaiting_discard++;
- else if (tmp == -EINVAL)
+ else if (errno == EINVAL)
tpriv->awaiting_reap++;
else
usbi_warn("unrecognised discard return %d", tmp);
@@ -1425,12 +1425,14 @@ static int cancel_control_transfer(struct usbi_transfer *itransfer)
tpriv->reap_action = CANCELLED;
r = ioctl(dpriv->fd, IOCTL_USBFS_DISCARDURB, tpriv->urbs);
- if (r == -EINVAL) {
- usbi_dbg("URB not found --> assuming ready to be reaped");
- return 0;
- } else if (r) {
- usbi_err("unrecognised DISCARD code %d", r);
- return LIBUSB_ERROR_OTHER;
+ if(r) {
+ if (errno == EINVAL) {
+ usbi_dbg("URB not found --> assuming ready to be reaped");
+ return 0;
+ } else {
+ usbi_err("unrecognised DISCARD code %d", errno);
+ return LIBUSB_ERROR_OTHER;
+ }
}
return 0;
@@ -1450,10 +1452,10 @@ static void cancel_bulk_transfer(struct usbi_transfer *itransfer)
int tmp = ioctl(dpriv->fd, IOCTL_USBFS_DISCARDURB, &tpriv->urbs[i]);
if (tmp == 0)
tpriv->awaiting_discard++;
- else if (tmp == -EINVAL)
+ else if (errno == EINVAL)
tpriv->awaiting_reap++;
else
- usbi_warn("unrecognised discard return %d", tmp);
+ usbi_warn("unrecognised discard return %d", errno);
}
}
@@ -1471,10 +1473,10 @@ static void cancel_iso_transfer(struct usbi_transfer *itransfer)
int tmp = ioctl(dpriv->fd, IOCTL_USBFS_DISCARDURB, tpriv->iso_urbs[i]);
if (tmp == 0)
tpriv->awaiting_discard++;
- else if (tmp == -EINVAL)
+ else if (errno == EINVAL)
tpriv->awaiting_reap++;
else
- usbi_warn("unrecognised discard return %d", tmp);
+ usbi_warn("unrecognised discard return %d", errno);
}
}
@@ -1603,10 +1605,10 @@ static int handle_bulk_completion(struct usbi_transfer *itransfer,
int r = ioctl(dpriv->fd, IOCTL_USBFS_DISCARDURB, &tpriv->urbs[i]);
if (r == 0)
tpriv->awaiting_discard++;
- else if (r == -EINVAL)
+ else if (errno == EINVAL)
tpriv->awaiting_reap++;
else
- usbi_warn("unrecognised discard return %d", r);
+ usbi_warn("unrecognised discard return %d", errno);
}
return 0;
} else {