]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
Clear USB fault when getting device ID (Issue #1606) master
authorMichael R Sweet <msweet@msweet.org>
Sun, 21 Jun 2026 00:34:12 +0000 (20:34 -0400)
committerMichael R Sweet <msweet@msweet.org>
Sun, 21 Jun 2026 00:34:12 +0000 (20:34 -0400)
backend/usb-libusb.c

index 51852b658f01ee029f7d3020548c6a4a74a81a42..9eb8254e51c069f88c588f9c5f0804cb1d70563b 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * LIBUSB interface code for CUPS.
  *
 /*
  * 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
  * Copyright © 2007-2019 by Apple Inc.
  *
  * Licensed under Apache License v2.0.  See the file "LICENSE" for more
@@ -1082,16 +1082,15 @@ get_device_id(usb_printer_t *printer,   /* I - Printer */
               char          *buffer,   /* I - String buffer */
               size_t        bufsize)   /* I - Number of bytes in buffer */
 {
               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);
   }
     *buffer = '\0';
     return (-1);
   }