diff options
author | NIIBE Yutaka <[email protected]> | 2015-11-04 12:07:49 +0000 |
---|---|---|
committer | NIIBE Yutaka <[email protected]> | 2016-11-29 08:02:49 +0000 |
commit | d4316d13749bd8662525c2b7c416d39c5d4d8089 (patch) | |
tree | 529db811411234ef9cdf25764fe44f23c034376b | |
parent | scd: Handle error correctly. (diff) | |
download | gnupg-d4316d13749bd8662525c2b7c416d39c5d4d8089.tar.gz gnupg-d4316d13749bd8662525c2b7c416d39c5d4d8089.zip |
scd: Fix error handling with libusb-compat library.
* scd/ccid-driver.c (bulk_out): Use LIBUSB_ERRNO_NO_SUCH_DEVICE.
--
With libusb-compat library, the error is different than original
libusb. (The libusb-compat library is used by Fedora.)
Backport of master commit: 1e94a672efb8bf66f416bc63bf6670e509a21fe5
-rw-r--r-- | scd/ccid-driver.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/scd/ccid-driver.c b/scd/ccid-driver.c index 23b992d2d..95f6c02a6 100644 --- a/scd/ccid-driver.c +++ b/scd/ccid-driver.c @@ -1878,6 +1878,11 @@ writen (int fd, const void *buf, size_t nbytes) return 0; } +#if defined(ENXIO) && !defined(LIBUSB_PATH_MAX) && defined(__GNU_LIBRARY__) +#define LIBUSB_ERRNO_NO_SUCH_DEVICE ENXIO /* libusb-compat */ +#elif defined(ENODEV) +#define LIBUSB_ERRNO_NO_SUCH_DEVICE ENODEV /* Original libusb */ +#endif /* Write a MSG of length MSGLEN to the designated bulk out endpoint. Returns 0 on success. */ @@ -1952,26 +1957,26 @@ bulk_out (ccid_driver_t handle, unsigned char *msg, size_t msglen, 5000 /* ms timeout */); if (rc == msglen) return 0; -#ifdef ENODEV - if (rc == -(ENODEV)) +#ifdef LIBUSB_ERRNO_NO_SUCH_DEVICE + if (rc == -(LIBUSB_ERRNO_NO_SUCH_DEVICE)) { /* The Linux libusb returns a negative error value. Catch the most important one. */ - errno = ENODEV; + errno = LIBUSB_ERRNO_NO_SUCH_DEVICE; rc = -1; } -#endif /*ENODEV*/ +#endif /*LIBUSB_ERRNO_NO_SUCH_DEVICE*/ if (rc == -1) { DEBUGOUT_1 ("usb_bulk_write error: %s\n", strerror (errno)); -#ifdef ENODEV - if (errno == ENODEV) +#ifdef LIBUSB_ERRNO_NO_SUCH_DEVICE + if (errno == LIBUSB_ERRNO_NO_SUCH_DEVICE) { handle->enodev_seen = 1; return CCID_DRIVER_ERR_NO_READER; } -#endif /*ENODEV*/ +#endif /*LIBUSB_ERRNO_NO_SUCH_DEVICE*/ } else DEBUGOUT_1 ("usb_bulk_write failed: %d\n", rc); |