elksmart-comm: detach any kernel driver
All checks were successful
Alpine 3.23 Success

This commit is contained in:
2026-03-07 07:26:52 +01:00
parent 8eb738b093
commit 5035750647

View File

@@ -306,20 +306,25 @@ init_device_from_desc(struct libusb_config_descriptor *desc, struct error **e)
static bool
init_device(libusb_device_handle *device, struct error **e)
{
int result = libusb_kernel_driver_active(device, USB_INTERFACE);
if (result == 1) {
// macOS for some reason claims the interface and we need to detach it
// before the following call to libusb_get_active_config_descriptor().
if ((result = libusb_detach_kernel_driver(device, USB_INTERFACE)))
return error_set(e, "cannot detach kernel driver: %s",
libusb_strerror(result));
print_debug("detached the kernel driver");
} else if (result) {
return error_set(e, "%s", libusb_strerror(result));
}
struct libusb_config_descriptor *desc = NULL;
int result =
libusb_get_active_config_descriptor(libusb_get_device(device), &desc);
if (result)
if ((result = libusb_get_active_config_descriptor(
libusb_get_device(device), &desc)))
return error_set(e, "%s", libusb_strerror(result));
bool ok = true;
if ((result = libusb_kernel_driver_active(device, USB_INTERFACE)) == 1)
ok = error_set(e, "device is claimed by a kernel driver");
else if (result)
ok = error_set(e, "%s", libusb_strerror(result));
else
ok = init_device_from_desc(desc, e);
bool ok = init_device_from_desc(desc, e);
libusb_free_config_descriptor(desc);
return ok;
}