/*
* LIBUSB interface code for CUPS.
*
- * Copyright © 2020-2025 by OpenPrinting.
+ * Copyright © 2020-2026 by OpenPrinting.
* Copyright © 2007-2019 by Apple Inc.
*
* Licensed under Apache License v2.0. See the file "LICENSE" for more
char *buffer, /* I - String buffer */
size_t bufsize) /* I - Number of bytes in buffer */
{
- size_t length; /* Length of device ID */
+ int err; /* libusb error */
+ size_t length; /* Length of device ID */
- if (libusb_control_transfer(printer->handle,
- LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_ENDPOINT_IN |
- LIBUSB_RECIPIENT_INTERFACE,
- 0, printer->conf,
- (printer->iface << 8) | printer->altset,
- (unsigned char *)buffer, bufsize, 5000) < 0)
+ if ((err = libusb_control_transfer(printer->handle, LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_ENDPOINT_IN | LIBUSB_RECIPIENT_INTERFACE, 0, printer->conf, (printer->iface << 8) | printer->altset, (unsigned char *)buffer, bufsize, 5000)) < 0)
{
+ if (err == LIBUSB_ERROR_PIPE)
+ libusb_clear_halt(printer->handle, printer->read_endp);
+
*buffer = '\0';
return (-1);
}