int _sync_gen_transfer(struct usbi_transfer *itransfer) { struct libusb_transfer *transfer; int fd, nr = 1; transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); if ((fd = _access_endpoint(transfer)) < 0) return _errno_to_libusb(errno); if ((ioctl(fd, USB_SET_TIMEOUT, &transfer->timeout)) < 0) return _errno_to_libusb(errno); if (IS_XFERIN(transfer)) { if ((transfer->flags & LIBUSB_TRANSFER_SHORT_NOT_OK) == 0) if ((ioctl(fd, USB_SET_SHORT_XFER, &nr)) < 0) return _errno_to_libusb(errno); nr = read(fd, transfer->buffer, transfer->length); } else { nr = write(fd, transfer->buffer, transfer->length); } if (nr < 0) return _errno_to_libusb(errno); itransfer->transferred = nr; return (0); }
int _sync_gen_transfer(struct usbi_transfer *itransfer) { struct libusb_transfer *transfer; struct device_priv *dpriv; int fd, nr = 1; transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); dpriv = (struct device_priv *)transfer->dev_handle->dev->os_priv; if (dpriv->devname == NULL) return (LIBUSB_ERROR_NOT_SUPPORTED); /* * Bulk, Interrupt or Isochronous transfer depends on the * endpoint and thus the node to open. */ if ((fd = _access_endpoint(transfer)) < 0) return _errno_to_libusb(errno); if ((ioctl(fd, USB_SET_TIMEOUT, &transfer->timeout)) < 0) return _errno_to_libusb(errno); if (IS_XFERIN(transfer)) { if ((transfer->flags & LIBUSB_TRANSFER_SHORT_NOT_OK) == 0) if ((ioctl(fd, USB_SET_SHORT_XFER, &nr)) < 0) return _errno_to_libusb(errno); nr = read(fd, transfer->buffer, transfer->length); } else { nr = write(fd, transfer->buffer, transfer->length); } if (nr < 0) return _errno_to_libusb(errno); itransfer->transferred = nr; return (0); }