From e9eec3a680cad3b2c9c5213fb7d60148cf6900da Mon Sep 17 00:00:00 2001 From: Chris Dickens Date: Tue, 28 Apr 2020 22:04:11 -0700 Subject: core: Narrow the types passed to certain backend functions Backend functions dealing with interfaces and alternate settings should use a type whose range represents that of valid values for interfaces and alternate settings. Switch to use uint8_t instead of int so that backends do not have to cast values or do range checks. Signed-off-by: Chris Dickens --- libusb/core.c | 31 ++++++------ libusb/libusbi.h | 14 +++--- libusb/os/darwin_usb.c | 49 +++++++++---------- libusb/os/darwin_usb.h | 2 +- libusb/os/haiku_usb.h | 10 ++-- libusb/os/haiku_usb_backend.cpp | 10 ++-- libusb/os/haiku_usb_raw.cpp | 8 ++-- libusb/os/linux_usbfs.c | 102 +++++++++++++++++++++------------------- libusb/os/netbsd_usb.c | 28 ++++++----- libusb/os/null_usb.c | 8 ++-- libusb/os/openbsd_usb.c | 24 +++++----- libusb/os/sunos_usb.c | 42 ++++++++--------- libusb/os/windows_common.c | 12 +++-- libusb/os/windows_common.h | 10 ++-- libusb/os/windows_usbdk.c | 10 ++-- libusb/os/windows_winusb.c | 88 +++++++++++++++++----------------- libusb/os/windows_winusb.h | 8 ++-- libusb/version_nano.h | 2 +- 18 files changed, 230 insertions(+), 228 deletions(-) diff --git a/libusb/core.c b/libusb/core.c index 00af3eb..aadabd0 100644 --- a/libusb/core.c +++ b/libusb/core.c @@ -1561,29 +1561,30 @@ int API_EXPORTED libusb_get_configuration(libusb_device_handle *dev_handle, int *config) { int r = LIBUSB_ERROR_NOT_SUPPORTED; + uint8_t tmp = 0; usbi_dbg(" "); if (usbi_backend.get_configuration) - r = usbi_backend.get_configuration(dev_handle, config); + r = usbi_backend.get_configuration(dev_handle, &tmp); if (r == LIBUSB_ERROR_NOT_SUPPORTED) { - uint8_t tmp = 0; usbi_dbg("falling back to control message"); r = libusb_control_transfer(dev_handle, LIBUSB_ENDPOINT_IN, LIBUSB_REQUEST_GET_CONFIGURATION, 0, 0, &tmp, 1, 1000); - if (r == 0) { + if (r == 1) { + r = 0; + } else if (r == 0) { usbi_err(HANDLE_CTX(dev_handle), "zero bytes returned in ctrl transfer?"); r = LIBUSB_ERROR_IO; - } else if (r == 1) { - r = 0; - *config = tmp; } else { usbi_dbg("control failed, error %d", r); } } - if (r == 0) - usbi_dbg("active config %d", *config); + if (r == 0) { + usbi_dbg("active config %u", tmp); + *config = (int)tmp; + } return r; } @@ -1688,7 +1689,7 @@ int API_EXPORTED libusb_claim_interface(libusb_device_handle *dev_handle, if (dev_handle->claimed_interfaces & (1U << interface_number)) goto out; - r = usbi_backend.claim_interface(dev_handle, interface_number); + r = usbi_backend.claim_interface(dev_handle, (uint8_t)interface_number); if (r == 0) dev_handle->claimed_interfaces |= 1U << interface_number; @@ -1731,7 +1732,7 @@ int API_EXPORTED libusb_release_interface(libusb_device_handle *dev_handle, goto out; } - r = usbi_backend.release_interface(dev_handle, interface_number); + r = usbi_backend.release_interface(dev_handle, (uint8_t)interface_number); if (r == 0) dev_handle->claimed_interfaces &= ~(1U << interface_number); @@ -1783,8 +1784,8 @@ int API_EXPORTED libusb_set_interface_alt_setting(libusb_device_handle *dev_hand } usbi_mutex_unlock(&dev_handle->lock); - return usbi_backend.set_interface_altsetting(dev_handle, interface_number, - alternate_setting); + return usbi_backend.set_interface_altsetting(dev_handle, + (uint8_t)interface_number, (uint8_t)alternate_setting); } /** \ingroup libusb_dev @@ -1996,7 +1997,7 @@ int API_EXPORTED libusb_kernel_driver_active(libusb_device_handle *dev_handle, return LIBUSB_ERROR_NO_DEVICE; if (usbi_backend.kernel_driver_active) - return usbi_backend.kernel_driver_active(dev_handle, interface_number); + return usbi_backend.kernel_driver_active(dev_handle, (uint8_t)interface_number); else return LIBUSB_ERROR_NOT_SUPPORTED; } @@ -2034,7 +2035,7 @@ int API_EXPORTED libusb_detach_kernel_driver(libusb_device_handle *dev_handle, return LIBUSB_ERROR_NO_DEVICE; if (usbi_backend.detach_kernel_driver) - return usbi_backend.detach_kernel_driver(dev_handle, interface_number); + return usbi_backend.detach_kernel_driver(dev_handle, (uint8_t)interface_number); else return LIBUSB_ERROR_NOT_SUPPORTED; } @@ -2071,7 +2072,7 @@ int API_EXPORTED libusb_attach_kernel_driver(libusb_device_handle *dev_handle, return LIBUSB_ERROR_NO_DEVICE; if (usbi_backend.attach_kernel_driver) - return usbi_backend.attach_kernel_driver(dev_handle, interface_number); + return usbi_backend.attach_kernel_driver(dev_handle, (uint8_t)interface_number); else return LIBUSB_ERROR_NOT_SUPPORTED; } diff --git a/libusb/libusbi.h b/libusb/libusbi.h index 9826bec..3c5add6 100644 --- a/libusb/libusbi.h +++ b/libusb/libusbi.h @@ -942,7 +942,7 @@ struct usbi_os_backend { * blocking * - another LIBUSB_ERROR code on other failure. */ - int (*get_configuration)(struct libusb_device_handle *dev_handle, int *config); + int (*get_configuration)(struct libusb_device_handle *dev_handle, uint8_t *config); /* Set the active configuration for a device. * @@ -978,7 +978,7 @@ struct usbi_os_backend { * was opened * - another LIBUSB_ERROR code on other failure */ - int (*claim_interface)(struct libusb_device_handle *dev_handle, int interface_number); + int (*claim_interface)(struct libusb_device_handle *dev_handle, uint8_t interface_number); /* Release a previously claimed interface. * @@ -995,7 +995,7 @@ struct usbi_os_backend { * was opened * - another LIBUSB_ERROR code on other failure */ - int (*release_interface)(struct libusb_device_handle *dev_handle, int interface_number); + int (*release_interface)(struct libusb_device_handle *dev_handle, uint8_t interface_number); /* Set the alternate setting for an interface. * @@ -1012,7 +1012,7 @@ struct usbi_os_backend { * - another LIBUSB_ERROR code on other failure */ int (*set_interface_altsetting)(struct libusb_device_handle *dev_handle, - int interface_number, int altsetting); + uint8_t interface_number, uint8_t altsetting); /* Clear a halt/stall condition on an endpoint. * @@ -1076,7 +1076,7 @@ struct usbi_os_backend { * - another LIBUSB_ERROR code on other failure */ int (*kernel_driver_active)(struct libusb_device_handle *dev_handle, - int interface_number); + uint8_t interface_number); /* Detach a kernel driver from an interface. Optional. * @@ -1092,7 +1092,7 @@ struct usbi_os_backend { * - another LIBUSB_ERROR code on other failure */ int (*detach_kernel_driver)(struct libusb_device_handle *dev_handle, - int interface_number); + uint8_t interface_number); /* Attach a kernel driver to an interface. Optional. * @@ -1109,7 +1109,7 @@ struct usbi_os_backend { * - another LIBUSB_ERROR code on other failure */ int (*attach_kernel_driver)(struct libusb_device_handle *dev_handle, - int interface_number); + uint8_t interface_number); /* Destroy a device. Optional. * diff --git a/libusb/os/darwin_usb.c b/libusb/os/darwin_usb.c index de5ce9c..58944be 100644 --- a/libusb/os/darwin_usb.c +++ b/libusb/os/darwin_usb.c @@ -76,8 +76,8 @@ static const char *darwin_device_class = kIOUSBDeviceClassName; static pthread_t libusb_darwin_at; static int darwin_get_config_descriptor(struct libusb_device *dev, uint8_t config_index, void *buffer, size_t len); -static int darwin_claim_interface(struct libusb_device_handle *dev_handle, int iface); -static int darwin_release_interface(struct libusb_device_handle *dev_handle, int iface); +static int darwin_claim_interface(struct libusb_device_handle *dev_handle, uint8_t iface); +static int darwin_release_interface(struct libusb_device_handle *dev_handle, uint8_t iface); static int darwin_reset_device(struct libusb_device_handle *dev_handle); static void darwin_async_io_callback (void *refcon, IOReturn result, void *arg0); @@ -661,7 +661,7 @@ static void darwin_exit (struct libusb_context *ctx) { pthread_mutex_unlock (&libusb_darwin_init_mutex); } -static int get_configuration_index (struct libusb_device *dev, int config_value) { +static int get_configuration_index (struct libusb_device *dev, UInt8 config_value) { struct darwin_cached_device *priv = DARWIN_CACHED_DEVICE(dev); UInt8 i, numConfig; IOUSBConfigurationDescriptorPtr desc; @@ -784,7 +784,7 @@ static enum libusb_error darwin_check_configuration (struct libusb_context *ctx, } else /* not configured */ dev->active_config = 0; - + usbi_dbg ("active config: %u, first config: %u", dev->active_config, dev->first_config); return LIBUSB_SUCCESS; @@ -1280,10 +1280,10 @@ static void darwin_close (struct libusb_device_handle *dev_handle) { } } -static int darwin_get_configuration(struct libusb_device_handle *dev_handle, int *config) { +static int darwin_get_configuration(struct libusb_device_handle *dev_handle, uint8_t *config) { struct darwin_cached_device *dpriv = DARWIN_CACHED_DEVICE(dev_handle->dev); - *config = (int) dpriv->active_config; + *config = dpriv->active_config; return LIBUSB_SUCCESS; } @@ -1291,9 +1291,10 @@ static int darwin_get_configuration(struct libusb_device_handle *dev_handle, int static enum libusb_error darwin_set_configuration(struct libusb_device_handle *dev_handle, int config) { struct darwin_cached_device *dpriv = DARWIN_CACHED_DEVICE(dev_handle->dev); IOReturn kresult; - int i; + uint8_t i; - assert(config >= 0 && config <= UINT8_MAX); + if (config == -1) + config = 0; /* Setting configuration will invalidate the interface, so we need to reclaim it. First, dispose of existing interfaces, if any. */ @@ -1315,7 +1316,7 @@ static enum libusb_error darwin_set_configuration(struct libusb_device_handle *d return LIBUSB_SUCCESS; } -static IOReturn darwin_get_interface (usb_device_t **darwin_device, int ifc, io_service_t *usbInterfacep) { +static IOReturn darwin_get_interface (usb_device_t **darwin_device, uint8_t ifc, io_service_t *usbInterfacep) { IOUSBFindInterfaceRequest request; IOReturn kresult; io_iterator_t interface_iterator; @@ -1352,7 +1353,7 @@ static IOReturn darwin_get_interface (usb_device_t **darwin_device, int ifc, io_ return kIOReturnSuccess; } -static enum libusb_error get_endpoints (struct libusb_device_handle *dev_handle, int iface) { +static enum libusb_error get_endpoints (struct libusb_device_handle *dev_handle, uint8_t iface) { struct darwin_device_handle_priv *priv = usbi_get_device_handle_priv(dev_handle); /* current interface */ @@ -1412,7 +1413,7 @@ static enum libusb_error get_endpoints (struct libusb_device_handle *dev_handle, return LIBUSB_SUCCESS; } -static int darwin_claim_interface(struct libusb_device_handle *dev_handle, int iface) { +static int darwin_claim_interface(struct libusb_device_handle *dev_handle, uint8_t iface) { struct darwin_cached_device *dpriv = DARWIN_CACHED_DEVICE(dev_handle->dev); struct darwin_device_handle_priv *priv = usbi_get_device_handle_priv(dev_handle); io_service_t usbInterface = IO_OBJECT_NULL; @@ -1421,12 +1422,10 @@ static int darwin_claim_interface(struct libusb_device_handle *dev_handle, int i IOCFPlugInInterface **plugInInterface = NULL; SInt32 score; - assert(iface >= 0 && iface <= UINT8_MAX); - /* current interface */ struct darwin_interface *cInterface = &priv->interfaces[iface]; - kresult = darwin_get_interface (dpriv->device, (uint8_t)iface, &usbInterface); + kresult = darwin_get_interface (dpriv->device, iface, &usbInterface); if (kresult != kIOReturnSuccess) return darwin_to_libusb (kresult); @@ -1435,13 +1434,13 @@ static int darwin_claim_interface(struct libusb_device_handle *dev_handle, int i usbi_info (HANDLE_CTX (dev_handle), "no interface found; setting configuration: %d", dpriv->first_config); /* set the configuration */ - ret = darwin_set_configuration (dev_handle, dpriv->first_config); + ret = darwin_set_configuration (dev_handle, (int) dpriv->first_config); if (ret != LIBUSB_SUCCESS) { usbi_err (HANDLE_CTX (dev_handle), "could not set configuration"); return ret; } - kresult = darwin_get_interface (dpriv->device, (uint8_t)iface, &usbInterface); + kresult = darwin_get_interface (dpriv->device, iface, &usbInterface); if (kresult != kIOReturnSuccess) { usbi_err (HANDLE_CTX (dev_handle), "darwin_get_interface: %s", darwin_error_str(kresult)); return darwin_to_libusb (kresult); @@ -1519,7 +1518,7 @@ static int darwin_claim_interface(struct libusb_device_handle *dev_handle, int i return LIBUSB_SUCCESS; } -static int darwin_release_interface(struct libusb_device_handle *dev_handle, int iface) { +static int darwin_release_interface(struct libusb_device_handle *dev_handle, uint8_t iface) { struct darwin_device_handle_priv *priv = usbi_get_device_handle_priv(dev_handle); IOReturn kresult; @@ -1552,7 +1551,7 @@ static int darwin_release_interface(struct libusb_device_handle *dev_handle, int return darwin_to_libusb (kresult); } -static int darwin_set_interface_altsetting(struct libusb_device_handle *dev_handle, int iface, int altsetting) { +static int darwin_set_interface_altsetting(struct libusb_device_handle *dev_handle, uint8_t iface, uint8_t altsetting) { struct darwin_device_handle_priv *priv = usbi_get_device_handle_priv(dev_handle); IOReturn kresult; enum libusb_error ret; @@ -1563,8 +1562,7 @@ static int darwin_set_interface_altsetting(struct libusb_device_handle *dev_hand if (!cInterface->interface) return LIBUSB_ERROR_NO_DEVICE; - assert(altsetting >= 0 && altsetting <= UINT8_MAX); - kresult = (*(cInterface->interface))->SetAlternateInterface (cInterface->interface, (UInt8)altsetting); + kresult = (*(cInterface->interface))->SetAlternateInterface (cInterface->interface, altsetting); if (kresult != kIOReturnSuccess) darwin_reset_device (dev_handle); @@ -1639,16 +1637,16 @@ static int darwin_restore_state (struct libusb_device_handle *dev_handle, int8_t usbi_dbg ("darwin/restore_state: reclaiming interfaces"); if (claimed_interfaces) { - for (int iface = 0 ; iface < USB_MAXINTERFACES ; ++iface) { + for (uint8_t iface = 0 ; iface < USB_MAXINTERFACES ; ++iface) { if (!(claimed_interfaces & (1U << iface))) { continue; } - usbi_dbg ("darwin/restore_state: re-claiming interface %d", iface); + usbi_dbg ("darwin/restore_state: re-claiming interface %u", iface); ret = darwin_claim_interface (dev_handle, iface); if (LIBUSB_SUCCESS != ret) { - usbi_dbg ("darwin/restore_state: could not claim interface %d", iface); + usbi_dbg ("darwin/restore_state: could not claim interface %u", iface); return LIBUSB_ERROR_NOT_FOUND; } @@ -1724,14 +1722,13 @@ static int darwin_reset_device(struct libusb_device_handle *dev_handle) { return darwin_restore_state (dev_handle, active_config, claimed_interfaces); } -static int darwin_kernel_driver_active(struct libusb_device_handle *dev_handle, int interface) { +static int darwin_kernel_driver_active(struct libusb_device_handle *dev_handle, uint8_t interface) { struct darwin_cached_device *dpriv = DARWIN_CACHED_DEVICE(dev_handle->dev); io_service_t usbInterface; CFTypeRef driver; IOReturn kresult; - assert(interface >= 0 && interface <= UINT8_MAX); - kresult = darwin_get_interface (dpriv->device, (uint8_t)interface, &usbInterface); + kresult = darwin_get_interface (dpriv->device, interface, &usbInterface); if (kresult != kIOReturnSuccess) { usbi_err (HANDLE_CTX (dev_handle), "darwin_get_interface: %s", darwin_error_str(kresult)); diff --git a/libusb/os/darwin_usb.h b/libusb/os/darwin_usb.h index 3d76baf..b799bfd 100644 --- a/libusb/os/darwin_usb.h +++ b/libusb/os/darwin_usb.h @@ -162,7 +162,7 @@ struct darwin_cached_device { char sys_path[21]; usb_device_t **device; int open_count; - UInt8 first_config, active_config, port; + UInt8 first_config, active_config, port; int can_enumerate; int refcount; bool in_reenumerate; diff --git a/libusb/os/haiku_usb.h b/libusb/os/haiku_usb.h index 9a87859..2dd5177 100644 --- a/libusb/os/haiku_usb.h +++ b/libusb/os/haiku_usb.h @@ -42,8 +42,8 @@ public: const usb_configuration_descriptor* ActiveConfiguration() const; uint8 EndpointToIndex(uint8) const; uint8 EndpointToInterface(uint8) const; - int ClaimInterface(int); - int ReleaseInterface(int); + int ClaimInterface(uint8); + int ReleaseInterface(uint8); int CheckInterfacesFree(uint8); void SetActiveConfiguration(uint8); uint8 ActiveConfigurationIndex() const; @@ -65,10 +65,10 @@ class USBDeviceHandle { public: USBDeviceHandle(USBDevice *dev); virtual ~USBDeviceHandle(); - int ClaimInterface(int); - int ReleaseInterface(int); + int ClaimInterface(uint8); + int ReleaseInterface(uint8); int SetConfiguration(uint8); - int SetAltSetting(int, int); + int SetAltSetting(uint8, uint8); int ClearHalt(uint8); status_t SubmitTransfer(struct usbi_transfer *); status_t CancelTransfer(USBTransfer *); diff --git a/libusb/os/haiku_usb_backend.cpp b/libusb/os/haiku_usb_backend.cpp index 2b6ad71..8bbf3e0 100644 --- a/libusb/os/haiku_usb_backend.cpp +++ b/libusb/os/haiku_usb_backend.cpp @@ -252,7 +252,7 @@ USBDeviceHandle::~USBDeviceHandle() } int -USBDeviceHandle::ClaimInterface(int inumber) +USBDeviceHandle::ClaimInterface(uint8 inumber) { int status = fUSBDevice->ClaimInterface(inumber); if (status == LIBUSB_SUCCESS) @@ -261,7 +261,7 @@ USBDeviceHandle::ClaimInterface(int inumber) } int -USBDeviceHandle::ReleaseInterface(int inumber) +USBDeviceHandle::ReleaseInterface(uint8 inumber) { fUSBDevice->ReleaseInterface(inumber); fClaimedInterfaces &= ~(1U << inumber); @@ -285,7 +285,7 @@ USBDeviceHandle::SetConfiguration(uint8 config) } int -USBDeviceHandle::SetAltSetting(int inumber, int alt) +USBDeviceHandle::SetAltSetting(uint8 inumber, uint8 alt) { usb_raw_command command; command.alternate.config_index = fUSBDevice->ActiveConfigurationIndex(); @@ -401,7 +401,7 @@ USBDevice::ActiveConfigurationIndex() const return fActiveConfiguration; } -int USBDevice::ClaimInterface(int interface) +int USBDevice::ClaimInterface(uint8 interface) { if (interface > ActiveConfiguration()->number_interfaces) return LIBUSB_ERROR_NOT_FOUND; @@ -411,7 +411,7 @@ int USBDevice::ClaimInterface(int interface) return LIBUSB_SUCCESS; } -int USBDevice::ReleaseInterface(int interface) +int USBDevice::ReleaseInterface(uint8 interface) { fClaimedInterfaces &= ~(1U << interface); return LIBUSB_SUCCESS; diff --git a/libusb/os/haiku_usb_raw.cpp b/libusb/os/haiku_usb_raw.cpp index a9fb6b8..bce706c 100644 --- a/libusb/os/haiku_usb_raw.cpp +++ b/libusb/os/haiku_usb_raw.cpp @@ -108,14 +108,14 @@ haiku_set_configuration(struct libusb_device_handle *dev_handle, int config) } static int -haiku_claim_interface(struct libusb_device_handle *dev_handle, int interface_number) +haiku_claim_interface(struct libusb_device_handle *dev_handle, uint8_t interface_number) { USBDeviceHandle *handle = *((USBDeviceHandle **)usbi_get_device_handle_priv(dev_handle)); return handle->ClaimInterface(interface_number); } static int -haiku_set_altsetting(struct libusb_device_handle *dev_handle, int interface_number, int altsetting) +haiku_set_altsetting(struct libusb_device_handle *dev_handle, uint8_t interface_number, uint8_t altsetting) { USBDeviceHandle *handle = *((USBDeviceHandle **)usbi_get_device_handle_priv(dev_handle)); return handle->SetAltSetting(interface_number, altsetting); @@ -129,10 +129,10 @@ haiku_clear_halt(struct libusb_device_handle *dev_handle, unsigned char endpoint } static int -haiku_release_interface(struct libusb_device_handle *dev_handle, int interface_number) +haiku_release_interface(struct libusb_device_handle *dev_handle, uint8_t interface_number) { USBDeviceHandle *handle = *((USBDeviceHandle **)usbi_get_device_handle_priv(dev_handle)); - haiku_set_altsetting(dev_handle,interface_number, 0); + haiku_set_altsetting(dev_handle, interface_number, 0); return handle->ReleaseInterface(interface_number); } diff --git a/libusb/os/linux_usbfs.c b/libusb/os/linux_usbfs.c index cfa9402..020db0d 100644 --- a/libusb/os/linux_usbfs.c +++ b/libusb/os/linux_usbfs.c @@ -100,7 +100,7 @@ static usbi_mutex_static_t linux_hotplug_startstop_lock = USBI_MUTEX_INITIALIZER usbi_mutex_static_t linux_hotplug_lock = USBI_MUTEX_INITIALIZER; static int linux_scan_devices(struct libusb_context *ctx); -static int detach_kernel_driver_and_claim(struct libusb_device_handle *, int); +static int detach_kernel_driver_and_claim(struct libusb_device_handle *, uint8_t); #if !defined(HAVE_LIBUDEV) static int linux_default_scan_devices(struct libusb_context *ctx); @@ -116,7 +116,7 @@ struct linux_device_priv { char *sysfs_dir; unsigned char *descriptors; int descriptors_len; - int active_config; /* cache val for !sysfs_available */ + uint8_t active_config; /* cache val for !sysfs_available */ }; struct linux_device_handle_priv { @@ -529,18 +529,20 @@ static int sysfs_scan_device(struct libusb_context *ctx, const char *devname) } /* read the bConfigurationValue for a device */ -static int sysfs_get_active_config(struct libusb_device *dev, int *config) +static int sysfs_get_active_config(struct libusb_device *dev, uint8_t *config) { struct linux_device_priv *priv = usbi_get_device_priv(dev); - int ret; + int ret, tmp; ret = read_sysfs_attr(DEVICE_CTX(dev), priv->sysfs_dir, "bConfigurationValue", - UINT8_MAX, config); + UINT8_MAX, &tmp); if (ret < 0) return ret; - if (*config == -1) - usbi_dbg("device unconfigured"); + if (tmp == -1) + tmp = 0; /* unconfigured */ + + *config = (uint8_t)tmp; return 0; } @@ -716,21 +718,25 @@ static int op_get_active_config_descriptor(struct libusb_device *dev, void *buffer, size_t len) { struct linux_device_priv *priv = usbi_get_device_priv(dev); - int r, config; void *config_desc; + uint8_t active_config; + int r; if (priv->sysfs_dir) { - r = sysfs_get_active_config(dev, &config); + r = sysfs_get_active_config(dev, &active_config); if (r < 0) return r; } else { /* Use cached bConfigurationValue */ - config = priv->active_config; + active_config = priv->active_config; } - if (config == -1) + + if (active_config == 0) { + usbi_err(DEVICE_CTX(dev), "device unconfigured"); return LIBUSB_ERROR_NOT_FOUND; + } - r = op_get_config_descriptor_by_value(dev, config, &config_desc); + r = op_get_config_descriptor_by_value(dev, active_config, &config_desc); if (r < 0) return r; @@ -770,7 +776,7 @@ static int op_get_config_descriptor(struct libusb_device *dev, static int usbfs_get_active_config(struct libusb_device *dev, int fd) { struct linux_device_priv *priv = usbi_get_device_priv(dev); - unsigned char active_config = 0; + uint8_t active_config = 0; int r; struct usbfs_ctrltransfer ctrl = { @@ -790,21 +796,17 @@ static int usbfs_get_active_config(struct libusb_device *dev, int fd) /* we hit this error path frequently with buggy devices :( */ usbi_warn(DEVICE_CTX(dev), "get configuration failed, errno=%d", errno); - priv->active_config = -1; - } else { - if (active_config > 0) { - priv->active_config = active_config; - } else { - /* some buggy devices have a configuration 0, but we're - * reaching into the corner of a corner case here, so let's - * not support buggy devices in these circumstances. - * stick to the specs: a configuration value of 0 means - * unconfigured. */ - usbi_warn(DEVICE_CTX(dev), "active cfg 0? assuming unconfigured device"); - priv->active_config = -1; - } + } else if (active_config == 0) { + /* some buggy devices have a configuration 0, but we're + * reaching into the corner of a corner case here, so let's + * not support buggy devices in these circumstances. + * stick to the specs: a configuration value of 0 means + * unconfigured. */ + usbi_warn(DEVICE_CTX(dev), "active cfg 0? assuming unconfigured device"); } + priv->active_config = active_config; + return LIBUSB_SUCCESS; } @@ -912,7 +914,7 @@ static int initialize_device(struct libusb_device *dev, uint8_t busnum, config = (struct usbi_configuration_descriptor *)(priv->descriptors + LIBUSB_DT_DEVICE_SIZE); priv->active_config = config->bConfigurationValue; } else { - priv->active_config = -1; /* No config dt */ + priv->active_config = 0; /* No config dt */ } return LIBUSB_SUCCESS; @@ -1332,7 +1334,7 @@ static void op_close(struct libusb_device_handle *dev_handle) } static int op_get_configuration(struct libusb_device_handle *handle, - int *config) + uint8_t *config) { struct linux_device_priv *priv = usbi_get_device_priv(handle->dev); int r; @@ -1349,10 +1351,8 @@ static int op_get_configuration(struct libusb_device_handle *handle, if (r < 0) return r; - if (*config == -1) { + if (*config == 0) usbi_err(HANDLE_CTX(handle), "device unconfigured"); - *config = 0; - } return 0; } @@ -1376,13 +1376,16 @@ static int op_set_configuration(struct libusb_device_handle *handle, int config) return LIBUSB_ERROR_OTHER; } + if (config == -1) + config = 0; + /* update our cached active config descriptor */ - priv->active_config = config; + priv->active_config = (uint8_t)config; return LIBUSB_SUCCESS; } -static int claim_interface(struct libusb_device_handle *handle, int iface) +static int claim_interface(struct libusb_device_handle *handle, unsigned int iface) { struct linux_device_handle_priv *hpriv = usbi_get_device_handle_priv(handle); int fd = hpriv->fd; @@ -1402,7 +1405,7 @@ static int claim_interface(struct libusb_device_handle *handle, int iface) return 0; } -static int release_interface(struct libusb_device_handle *handle, int iface) +static int release_interface(struct libusb_device_handle *handle, unsigned int iface) { struct linux_device_handle_priv *hpriv = usbi_get_device_handle_priv(handle); int fd = hpriv->fd; @@ -1418,15 +1421,15 @@ static int release_interface(struct libusb_device_handle *handle, int iface) return 0; } -static int op_set_interface(struct libusb_device_handle *handle, int iface, - int altsetting) +static int op_set_interface(struct libusb_device_handle *handle, uint8_t interface, + uint8_t altsetting) { struct linux_device_handle_priv *hpriv = usbi_get_device_handle_priv(handle); int fd = hpriv->fd; struct usbfs_setinterface setintf; int r; - setintf.interface = iface; + setintf.interface = interface; setintf.altsetting = altsetting; r = ioctl(fd, IOCTL_USBFS_SETINTERFACE, &setintf); if (r < 0) { @@ -1467,7 +1470,8 @@ static int op_reset_device(struct libusb_device_handle *handle) { struct linux_device_handle_priv *hpriv = usbi_get_device_handle_priv(handle); int fd = hpriv->fd; - int i, r, ret = 0; + int r, ret = 0; + uint8_t i; /* Doing a device reset will cause the usbfs driver to get unbound * from any interfaces it is bound to. By voluntarily unbinding @@ -1503,7 +1507,7 @@ static int op_reset_device(struct libusb_device_handle *handle) */ r = detach_kernel_driver_and_claim(handle, i); if (r) { - usbi_warn(HANDLE_CTX(handle), "failed to re-claim interface %d after reset: %s", + usbi_warn(HANDLE_CTX(handle), "failed to re-claim interface %u after reset: %s", i, libusb_error_name(r)); handle->claimed_interfaces &= ~(1UL << i); ret = LIBUSB_ERROR_NOT_FOUND; @@ -1589,7 +1593,7 @@ static int op_dev_mem_free(struct libusb_device_handle *handle, void *buffer, } static int op_kernel_driver_active(struct libusb_device_handle *handle, - int interface) + uint8_t interface) { struct linux_device_handle_priv *hpriv = usbi_get_device_handle_priv(handle); int fd = hpriv->fd; @@ -1612,7 +1616,7 @@ static int op_kernel_driver_active(struct libusb_device_handle *handle, } static int op_detach_kernel_driver(struct libusb_device_handle *handle, - int interface) + uint8_t interface) { struct linux_device_handle_priv *hpriv = usbi_get_device_handle_priv(handle); int fd = hpriv->fd; @@ -1646,7 +1650,7 @@ static int op_detach_kernel_driver(struct libusb_device_handle *handle, } static int op_attach_kernel_driver(struct libusb_device_handle *handle, - int interface) + uint8_t interface) { struct linux_device_handle_priv *hpriv = usbi_get_device_handle_priv(handle); int fd = hpriv->fd; @@ -1678,7 +1682,7 @@ static int op_attach_kernel_driver(struct libusb_device_handle *handle, } static int detach_kernel_driver_and_claim(struct libusb_device_handle *handle, - int interface) + uint8_t interface) { struct linux_device_handle_priv *hpriv = usbi_get_device_handle_priv(handle); struct usbfs_disconnect_claim dc; @@ -1713,24 +1717,24 @@ static int detach_kernel_driver_and_claim(struct libusb_device_handle *handle, return claim_interface(handle, interface); } -static int op_claim_interface(struct libusb_device_handle *handle, int iface) +static int op_claim_interface(struct libusb_device_handle *handle, uint8_t interface) { if (handle->auto_detach_kernel_driver) - return detach_kernel_driver_and_claim(handle, iface); + return detach_kernel_driver_and_claim(handle, interface); else - return claim_interface(handle, iface); + return claim_interface(handle, interface); } -static int op_release_interface(struct libusb_device_handle *handle, int iface) +static int op_release_interface(struct libusb_device_handle *handle, uint8_t interface) { int r; - r = release_interface(handle, iface); + r = release_interface(handle, interface); if (r) return r; if (handle->auto_detach_kernel_driver) - op_attach_kernel_driver(handle, iface); + op_attach_kernel_driver(handle, interface); return 0; } diff --git a/libusb/os/netbsd_usb.c b/libusb/os/netbsd_usb.c index 2a1359b..7a36209 100644 --- a/libusb/os/netbsd_usb.c +++ b/libusb/os/netbsd_usb.c @@ -56,14 +56,14 @@ static int netbsd_get_active_config_descriptor(struct libusb_device *, static int netbsd_get_config_descriptor(struct libusb_device *, uint8_t, void *, size_t); -static int netbsd_get_configuration(struct libusb_device_handle *, int *); +static int netbsd_get_configuration(struct libusb_device_handle *, uint8_t *); static int netbsd_set_configuration(struct libusb_device_handle *, int); -static int netbsd_claim_interface(struct libusb_device_handle *, int); -static int netbsd_release_interface(struct libusb_device_handle *, int); +static int netbsd_claim_interface(struct libusb_device_handle *, uint8_t); +static int netbsd_release_interface(struct libusb_device_handle *, uint8_t); -static int netbsd_set_interface_altsetting(struct libusb_device_handle *, int, - int); +static int netbsd_set_interface_altsetting(struct libusb_device_handle *, + uint8_t, uint8_t); static int netbsd_clear_halt(struct libusb_device_handle *, unsigned char); static void netbsd_destroy_device(struct libusb_device *); @@ -273,16 +273,18 @@ netbsd_get_config_descriptor(struct libusb_device *dev, uint8_t idx, } int -netbsd_get_configuration(struct libusb_device_handle *handle, int *config) +netbsd_get_configuration(struct libusb_device_handle *handle, uint8_t *config) { struct device_priv *dpriv = usbi_get_device_priv(handle->dev); + int tmp; usbi_dbg(" "); - if (ioctl(dpriv->fd, USB_GET_CONFIG, config) < 0) + if (ioctl(dpriv->fd, USB_GET_CONFIG, &tmp) < 0) return _errno_to_libusb(errno); - usbi_dbg("configuration %d", *config); + usbi_dbg("configuration %d", tmp); + *config = (uint8_t)tmp; return (LIBUSB_SUCCESS); } @@ -301,7 +303,7 @@ netbsd_set_configuration(struct libusb_device_handle *handle, int config) } int -netbsd_claim_interface(struct libusb_device_handle *handle, int iface) +netbsd_claim_interface(struct libusb_device_handle *handle, uint8_t iface) { struct handle_priv *hpriv = usbi_get_device_handle_priv(handle); int i; @@ -315,7 +317,7 @@ netbsd_claim_interface(struct libusb_device_handle *handle, int iface) } int -netbsd_release_interface(struct libusb_device_handle *handle, int iface) +netbsd_release_interface(struct libusb_device_handle *handle, uint8_t iface) { struct handle_priv *hpriv = usbi_get_device_handle_priv(handle); int i; @@ -330,13 +332,13 @@ netbsd_release_interface(struct libusb_device_handle *handle, int iface) } int -netbsd_set_interface_altsetting(struct libusb_device_handle *handle, int iface, - int altsetting) +netbsd_set_interface_altsetting(struct libusb_device_handle *handle, uint8_t iface, + uint8_t altsetting) { struct device_priv *dpriv = usbi_get_device_priv(handle->dev); struct usb_alt_interface intf; - usbi_dbg("iface %d, setting %d", iface, altsetting); + usbi_dbg("iface %u, setting %u", iface, altsetting); memset(&intf, 0, sizeof(intf)); diff --git a/libusb/os/null_usb.c b/libusb/os/null_usb.c index 06278b1..0cd531d 100644 --- a/libusb/os/null_usb.c +++ b/libusb/os/null_usb.c @@ -57,20 +57,20 @@ null_set_configuration(struct libusb_device_handle *handle, int config) } static int -null_claim_interface(struct libusb_device_handle *handle, int iface) +null_claim_interface(struct libusb_device_handle *handle, uint8_t iface) { return LIBUSB_ERROR_NOT_SUPPORTED; } static int -null_release_interface(struct libusb_device_handle *handle, int iface) +null_release_interface(struct libusb_device_handle *handle, uint8_t iface) { return LIBUSB_ERROR_NOT_SUPPORTED; } static int -null_set_interface_altsetting(struct libusb_device_handle *handle, int iface, - int altsetting) +null_set_interface_altsetting(struct libusb_device_handle *handle, uint8_t iface, + uint8_t altsetting) { return LIBUSB_ERROR_NOT_SUPPORTED; } diff --git a/libusb/os/openbsd_usb.c b/libusb/os/openbsd_usb.c index 42cfbd5..f5b0470 100644 --- a/libusb/os/openbsd_usb.c +++ b/libusb/os/openbsd_usb.c @@ -56,14 +56,14 @@ static int obsd_get_active_config_descriptor(struct libusb_device *, static int obsd_get_config_descriptor(struct libusb_device *, uint8_t, void *, size_t); -static int obsd_get_configuration(struct libusb_device_handle *, int *); +static int obsd_get_configuration(struct libusb_device_handle *, uint8_t *); static int obsd_set_configuration(struct libusb_device_handle *, int); -static int obsd_claim_interface(struct libusb_device_handle *, int); -static int obsd_release_interface(struct libusb_device_handle *, int); +static int obsd_claim_interface(struct libusb_device_handle *, uint8_t); +static int obsd_release_interface(struct libusb_device_handle *, uint8_t); -static int obsd_set_interface_altsetting(struct libusb_device_handle *, int, - int); +static int obsd_set_interface_altsetting(struct libusb_device_handle *, uint8_t, + uint8_t); static int obsd_clear_halt(struct libusb_device_handle *, unsigned char); static void obsd_destroy_device(struct libusb_device *); @@ -298,13 +298,13 @@ obsd_get_config_descriptor(struct libusb_device *dev, uint8_t idx, } int -obsd_get_configuration(struct libusb_device_handle *handle, int *config) +obsd_get_configuration(struct libusb_device_handle *handle, uint8_t *config) { struct device_priv *dpriv = usbi_get_device_priv(handle->dev); *config = dpriv->cdesc->bConfigurationValue; - usbi_dbg("bConfigurationValue %d", *config); + usbi_dbg("bConfigurationValue %u", *config); return (LIBUSB_SUCCESS); } @@ -326,7 +326,7 @@ obsd_set_configuration(struct libusb_device_handle *handle, int config) } int -obsd_claim_interface(struct libusb_device_handle *handle, int iface) +obsd_claim_interface(struct libusb_device_handle *handle, uint8_t iface) { struct handle_priv *hpriv = usbi_get_device_handle_priv(handle); int i; @@ -340,7 +340,7 @@ obsd_claim_interface(struct libusb_device_handle *handle, int iface) } int -obsd_release_interface(struct libusb_device_handle *handle, int iface) +obsd_release_interface(struct libusb_device_handle *handle, uint8_t iface) { struct handle_priv *hpriv = usbi_get_device_handle_priv(handle); int i; @@ -355,8 +355,8 @@ obsd_release_interface(struct libusb_device_handle *handle, int iface) } int -obsd_set_interface_altsetting(struct libusb_device_handle *handle, int iface, - int altsetting) +obsd_set_interface_altsetting(struct libusb_device_handle *handle, uint8_t iface, + uint8_t altsetting) { struct device_priv *dpriv = usbi_get_device_priv(handle->dev); struct usb_alt_interface intf; @@ -364,7 +364,7 @@ obsd_set_interface_altsetting(struct libusb_device_handle *handle, int iface, if (dpriv->devname == NULL) return (LIBUSB_ERROR_NOT_SUPPORTED); - usbi_dbg("iface %d, setting %d", iface, altsetting); + usbi_dbg("iface %u, setting %u", iface, altsetting); memset(&intf, 0, sizeof(intf)); diff --git a/libusb/os/sunos_usb.c b/libusb/os/sunos_usb.c index 11cf688..3e2fb4f 100644 --- a/libusb/os/sunos_usb.c +++ b/libusb/os/sunos_usb.c @@ -64,20 +64,20 @@ static int sunos_get_active_config_descriptor(struct libusb_device *, void *, size_t); static int sunos_get_config_descriptor(struct libusb_device *, uint8_t, void *, size_t); -static int sunos_get_configuration(struct libusb_device_handle *, int *); +static int sunos_get_configuration(struct libusb_device_handle *, uint8_t *); static int sunos_set_configuration(struct libusb_device_handle *, int); -static int sunos_claim_interface(struct libusb_device_handle *, int); -static int sunos_release_interface(struct libusb_device_handle *, int); +static int sunos_claim_interface(struct libusb_device_handle *, uint8_t); +static int sunos_release_interface(struct libusb_device_handle *, uint8_t); static int sunos_set_interface_altsetting(struct libusb_device_handle *, - int, int); -static int sunos_clear_halt(struct libusb_device_handle *, uint8_t); + uint8_t, uint8_t); +static int sunos_clear_halt(struct libusb_device_handle *, unsigned char); static void sunos_destroy_device(struct libusb_device *); static int sunos_submit_transfer(struct usbi_transfer *); static int sunos_cancel_transfer(struct usbi_transfer *); static int sunos_handle_transfer_completion(struct usbi_transfer *); -static int sunos_kernel_driver_active(struct libusb_device_handle *, int interface); -static int sunos_detach_kernel_driver (struct libusb_device_handle *dev, int interface_number); -static int sunos_attach_kernel_driver (struct libusb_device_handle *dev, int interface_number); +static int sunos_kernel_driver_active(struct libusb_device_handle *, uint8_t); +static int sunos_detach_kernel_driver(struct libusb_device_handle *, uint8_t); +static int sunos_attach_kernel_driver(struct libusb_device_handle *, uint8_t); static int sunos_usb_open_ep0(sunos_dev_handle_priv_t *hpriv, sunos_dev_priv_t *dpriv); static int sunos_usb_ioctl(struct libusb_device *dev, int cmd); @@ -222,7 +222,7 @@ sunos_usb_ioctl(struct libusb_device *dev, int cmd) } static int -sunos_kernel_driver_active(struct libusb_device_handle *dev_handle, int interface) +sunos_kernel_driver_active(struct libusb_device_handle *dev_handle, uint8_t interface) { sunos_dev_priv_t *dpriv = usbi_get_device_priv(dev_handle->dev); @@ -345,7 +345,7 @@ sunos_exec_command(struct libusb_context *ctx, const char *path, static int sunos_detach_kernel_driver(struct libusb_device_handle *dev_handle, - int interface_number) + uint8_t interface_number) { struct libusb_context *ctx = HANDLE_CTX(dev_handle); string_list_t *list; @@ -402,7 +402,7 @@ sunos_detach_kernel_driver(struct libusb_device_handle *dev_handle, static int sunos_attach_kernel_driver(struct libusb_device_handle *dev_handle, - int interface_number) + uint8_t interface_number) { struct libusb_context *ctx = HANDLE_CTX(dev_handle); string_list_t *list; @@ -1054,13 +1054,13 @@ sunos_get_config_descriptor(struct libusb_device *dev, uint8_t idx, } int -sunos_get_configuration(struct libusb_device_handle *handle, int *config) +sunos_get_configuration(struct libusb_device_handle *handle, uint8_t *config) { sunos_dev_priv_t *dpriv = usbi_get_device_priv(handle->dev); *config = dpriv->cfgvalue; - usbi_dbg("bConfigurationValue %d", *config); + usbi_dbg("bConfigurationValue %u", *config); return (LIBUSB_SUCCESS); } @@ -1087,21 +1087,21 @@ sunos_set_configuration(struct libusb_device_handle *handle, int config) } int -sunos_claim_interface(struct libusb_device_handle *handle, int iface) +sunos_claim_interface(struct libusb_device_handle *handle, uint8_t iface) { UNUSED(handle); - usbi_dbg("iface %d", iface); + usbi_dbg("iface %u", iface); return (LIBUSB_SUCCESS); } int -sunos_release_interface(struct libusb_device_handle *handle, int iface) +sunos_release_interface(struct libusb_device_handle *handle, uint8_t iface) { sunos_dev_handle_priv_t *hpriv = usbi_get_device_handle_priv(handle); - usbi_dbg("iface %d", iface); + usbi_dbg("iface %u", iface); /* XXX: can we release it? */ hpriv->altsetting[iface] = 0; @@ -1110,13 +1110,13 @@ sunos_release_interface(struct libusb_device_handle *handle, int iface) } int -sunos_set_interface_altsetting(struct libusb_device_handle *handle, int iface, - int altsetting) +sunos_set_interface_altsetting(struct libusb_device_handle *handle, uint8_t iface, + uint8_t altsetting) { sunos_dev_priv_t *dpriv = usbi_get_device_priv(handle->dev); sunos_dev_handle_priv_t *hpriv = usbi_get_device_handle_priv(handle); - usbi_dbg("iface %d, setting %d", iface, altsetting); + usbi_dbg("iface %u, setting %u", iface, altsetting); if (dpriv->ugenpath == NULL) return (LIBUSB_ERROR_NOT_FOUND); @@ -1340,7 +1340,7 @@ solaris_submit_ctrl_on_default(struct libusb_transfer *transfer) } int -sunos_clear_halt(struct libusb_device_handle *handle, uint8_t endpoint) +sunos_clear_halt(struct libusb_device_handle *handle, unsigned char endpoint) { int ret; diff --git a/libusb/os/windows_common.c b/libusb/os/windows_common.c index 1c1ca01..d8f1e38 100644 --- a/libusb/os/windows_common.c +++ b/libusb/os/windows_common.c @@ -619,7 +619,7 @@ static int windows_get_config_descriptor_by_value(struct libusb_device *dev, return priv->backend->get_config_descriptor_by_value(dev, bConfigurationValue, buffer); } -static int windows_get_configuration(struct libusb_device_handle *dev_handle, int *config) +static int windows_get_configuration(struct libusb_device_handle *dev_handle, uint8_t *config) { struct windows_context_priv *priv = usbi_get_context_priv(HANDLE_CTX(dev_handle)); return priv->backend->get_configuration(dev_handle, config); @@ -628,23 +628,25 @@ static int windows_get_configuration(struct libusb_device_handle *dev_handle, in static int windows_set_configuration(struct libusb_device_handle *dev_handle, int config) { struct windows_context_priv *priv = usbi_get_context_priv(HANDLE_CTX(dev_handle)); - return priv->backend->set_configuration(dev_handle, config); + if (config == -1) + config = 0; + return priv->backend->set_configuration(dev_handle, (uint8_t)config); } -static int windows_claim_interface(struct libusb_device_handle *dev_handle, int interface_number) +static int windows_claim_interface(struct libusb_device_handle *dev_handle, uint8_t interface_number) { struct windows_context_priv *priv = usbi_get_context_priv(HANDLE_CTX(dev_handle)); return priv->backend->claim_interface(dev_handle, interface_number); } -static int windows_release_interface(struct libusb_device_handle *dev_handle, int interface_number) +static int windows_release_interface(struct libusb_device_handle *dev_handle, uint8_t interface_number) { struct windows_context_priv *priv = usbi_get_context_priv(HANDLE_CTX(dev_handle)); return priv->backend->release_interface(dev_handle, interface_number); } static int windows_set_interface_altsetting(struct libusb_device_handle *dev_handle, - int interface_number, int altsetting) + uint8_t interface_number, uint8_t altsetting) { struct windows_context_priv *priv = usbi_get_context_priv(HANDLE_CTX(dev_handle)); return priv->backend->set_interface_altsetting(dev_handle, interface_number, altsetting); diff --git a/libusb/os/windows_common.h b/libusb/os/windows_common.h index 6617de4..59891d4 100644 --- a/libusb/os/windows_common.h +++ b/libusb/os/windows_common.h @@ -304,12 +304,12 @@ struct windows_backend { uint8_t config_index, void *buffer, size_t len); int (*get_config_descriptor_by_value)(struct libusb_device *device, uint8_t bConfigurationValue, void **buffer); - int (*get_configuration)(struct libusb_device_handle *dev_handle, int *config); - int (*set_configuration)(struct libusb_device_handle *dev_handle, int config); - int (*claim_interface)(struct libusb_device_handle *dev_handle, int interface_number); - int (*release_interface)(struct libusb_device_handle *dev_handle, int interface_number); + int (*get_configuration)(struct libusb_device_handle *dev_handle, uint8_t *config); + int (*set_configuration)(struct libusb_device_handle *dev_handle, uint8_t config); + int (*claim_interface)(struct libusb_device_handle *dev_handle, uint8_t interface_number); + int (*release_interface)(struct libusb_device_handle *dev_handle, uint8_t interface_number); int (*set_interface_altsetting)(struct libusb_device_handle *dev_handle, - int interface_number, int altsetting); + uint8_t interface_number, uint8_t altsetting); int (*clear_halt)(struct libusb_device_handle *dev_handle, unsigned char endpoint); int (*reset_device)(struct libusb_device_handle *dev_handle); diff --git a/libusb/os/windows_usbdk.c b/libusb/os/windows_usbdk.c index 7d6a3d5..d9e2a9c 100644 --- a/libusb/os/windows_usbdk.c +++ b/libusb/os/windows_usbdk.c @@ -421,7 +421,7 @@ static void usbdk_close(struct libusb_device_handle *dev_handle) usbi_err(HANDLE_CTX(dev_handle), "Redirector shutdown failed"); } -static int usbdk_get_configuration(struct libusb_device_handle *dev_handle, int *config) +static int usbdk_get_configuration(struct libusb_device_handle *dev_handle, uint8_t *config) { struct usbdk_device_priv *priv = usbi_get_device_priv(dev_handle->dev); @@ -430,21 +430,21 @@ static int usbdk_get_configuration(struct libusb_device_handle *dev_handle, int return LIBUSB_SUCCESS; } -static int usbdk_set_configuration(struct libusb_device_handle *dev_handle, int config) +static int usbdk_set_configuration(struct libusb_device_handle *dev_handle, uint8_t config) { UNUSED(dev_handle); UNUSED(config); return LIBUSB_SUCCESS; } -static int usbdk_claim_interface(struct libusb_device_handle *dev_handle, int iface) +static int usbdk_claim_interface(struct libusb_device_handle *dev_handle, uint8_t iface) { UNUSED(dev_handle); UNUSED(iface); return LIBUSB_SUCCESS; } -static int usbdk_set_interface_altsetting(struct libusb_device_handle *dev_handle, int iface, int altsetting) +static int usbdk_set_interface_altsetting(struct libusb_device_handle *dev_handle, uint8_t iface, uint8_t altsetting) { struct usbdk_device_priv *priv = usbi_get_device_priv(dev_handle->dev); @@ -456,7 +456,7 @@ static int usbdk_set_interface_altsetting(struct libusb_device_handle *dev_handl return LIBUSB_SUCCESS; } -static int usbdk_release_interface(struct libusb_device_handle *dev_handle, int iface) +static int usbdk_release_interface(struct libusb_device_handle *dev_handle, uint8_t iface) { UNUSED(dev_handle); UNUSED(iface); diff --git a/libusb/os/windows_winusb.c b/libusb/os/windows_winusb.c index a623a61..8ea9697 100644 --- a/libusb/os/windows_winusb.c +++ b/libusb/os/windows_winusb.c @@ -54,11 +54,11 @@ static bool winusbx_init(struct libusb_context *ctx); static void winusbx_exit(void); static int winusbx_open(int sub_api, struct libusb_device_handle *dev_handle); static void winusbx_close(int sub_api, struct libusb_device_handle *dev_handle); -static int winusbx_configure_endpoints(int sub_api, struct libusb_device_handle *dev_handle, int iface); -static int winusbx_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface); -static int winusbx_release_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface); +static int winusbx_configure_endpoints(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface); +static int winusbx_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface); +static int winusbx_release_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface); static int winusbx_submit_control_transfer(int sub_api, struct usbi_transfer *itransfer); -static int winusbx_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, int iface, int altsetting); +static int winusbx_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface, uint8_t altsetting); static int winusbx_submit_iso_transfer(int sub_api, struct usbi_transfer *itransfer); static int winusbx_submit_bulk_transfer(int sub_api, struct usbi_transfer *itransfer); static int winusbx_clear_halt(int sub_api, struct libusb_device_handle *dev_handle, unsigned char endpoint); @@ -70,9 +70,9 @@ static bool hid_init(struct libusb_context *ctx); static void hid_exit(void); static int hid_open(int sub_api, struct libusb_device_handle *dev_handle); static void hid_close(int sub_api, struct libusb_device_handle *dev_handle); -static int hid_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface); -static int hid_release_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface); -static int hid_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, int iface, int altsetting); +static int hid_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface); +static int hid_release_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface); +static int hid_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface, uint8_t altsetting); static int hid_submit_control_transfer(int sub_api, struct usbi_transfer *itransfer); static int hid_submit_bulk_transfer(int sub_api, struct usbi_transfer *itransfer); static int hid_clear_halt(int sub_api, struct libusb_device_handle *dev_handle, unsigned char endpoint); @@ -81,9 +81,9 @@ static enum libusb_transfer_status hid_copy_transfer_data(int sub_api, struct us // Composite API prototypes static int composite_open(int sub_api, struct libusb_device_handle *dev_handle); static void composite_close(int sub_api, struct libusb_device_handle *dev_handle); -static int composite_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface); -static int composite_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, int iface, int altsetting); -static int composite_release_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface); +static int composite_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface); +static int composite_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface, uint8_t altsetting); +static int composite_release_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface); static int composite_submit_control_transfer(int sub_api, struct usbi_transfer *itransfer); static int composite_submit_bulk_transfer(int sub_api, struct usbi_transfer *itransfer); static int composite_submit_iso_transfer(int sub_api, struct usbi_transfer *itransfer); @@ -467,7 +467,7 @@ static int get_interface_by_endpoint(struct libusb_config_descriptor *conf_desc, /* * Populate the endpoints addresses of the device_priv interface helper structs */ -static int windows_assign_endpoints(struct libusb_device_handle *dev_handle, int iface, int altsetting) +static int windows_assign_endpoints(struct libusb_device_handle *dev_handle, uint8_t iface, uint8_t altsetting) { struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev); struct libusb_config_descriptor *conf_desc; @@ -484,7 +484,7 @@ static int windows_assign_endpoints(struct libusb_device_handle *dev_handle, int safe_free(priv->usb_interface[iface].endpoint); if (if_desc->bNumEndpoints == 0) { - usbi_dbg("no endpoints found for interface %d", iface); + usbi_dbg("no endpoints found for interface %u", iface); libusb_free_config_descriptor(conf_desc); priv->usb_interface[iface].current_altsetting = altsetting; return LIBUSB_SUCCESS; @@ -499,7 +499,7 @@ static int windows_assign_endpoints(struct libusb_device_handle *dev_handle, int priv->usb_interface[iface].nb_endpoints = if_desc->bNumEndpoints; for (i = 0; i < if_desc->bNumEndpoints; i++) { priv->usb_interface[iface].endpoint[i] = if_desc->endpoint[i].bEndpointAddress; - usbi_dbg("(re)assigned endpoint %02X to interface %d", priv->usb_interface[iface].endpoint[i], iface); + usbi_dbg("(re)assigned endpoint %02X to interface %u", priv->usb_interface[iface].endpoint[i], iface); } libusb_free_config_descriptor(conf_desc); @@ -1595,15 +1595,10 @@ static void winusb_close(struct libusb_device_handle *dev_handle) priv->apib->close(SUB_API_NOTSET, dev_handle); } -static int winusb_get_configuration(struct libusb_device_handle *dev_handle, int *config) +static int winusb_get_configuration(struct libusb_device_handle *dev_handle, uint8_t *config) { struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev); - if (priv->active_config == 0) { - *config = 0; - return LIBUSB_ERROR_NOT_FOUND; - } - *config = priv->active_config; return LIBUSB_SUCCESS; } @@ -1613,23 +1608,23 @@ static int winusb_get_configuration(struct libusb_device_handle *dev_handle, int * does not currently expose a service that allows higher-level drivers to set * the configuration." */ -static int winusb_set_configuration(struct libusb_device_handle *dev_handle, int config) +static int winusb_set_configuration(struct libusb_device_handle *dev_handle, uint8_t config) { struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev); int r = LIBUSB_SUCCESS; r = libusb_control_transfer(dev_handle, LIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_STANDARD | LIBUSB_RECIPIENT_DEVICE, - LIBUSB_REQUEST_SET_CONFIGURATION, (uint16_t)config, + LIBUSB_REQUEST_SET_CONFIGURATION, config, 0, NULL, 0, 1000); if (r == LIBUSB_SUCCESS) - priv->active_config = (uint8_t)config; + priv->active_config = config; return r; } -static int winusb_claim_interface(struct libusb_device_handle *dev_handle, int iface) +static int winusb_claim_interface(struct libusb_device_handle *dev_handle, uint8_t iface) { struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev); int r; @@ -1647,7 +1642,7 @@ static int winusb_claim_interface(struct libusb_device_handle *dev_handle, int i return r; } -static int winusb_set_interface_altsetting(struct libusb_device_handle *dev_handle, int iface, int altsetting) +static int winusb_set_interface_altsetting(struct libusb_device_handle *dev_handle, uint8_t iface, uint8_t altsetting) { struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev); int r; @@ -1665,7 +1660,7 @@ static int winusb_set_interface_altsetting(struct libusb_device_handle *dev_hand return r; } -static int winusb_release_interface(struct libusb_device_handle *dev_handle, int iface) +static int winusb_release_interface(struct libusb_device_handle *dev_handle, uint8_t iface) { struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev); @@ -2160,7 +2155,7 @@ static void winusbx_close(int sub_api, struct libusb_device_handle *dev_handle) } } -static int winusbx_configure_endpoints(int sub_api, struct libusb_device_handle *dev_handle, int iface) +static int winusbx_configure_endpoints(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface) { struct winusb_device_handle_priv *handle_priv = usbi_get_device_handle_priv(dev_handle); struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev); @@ -2213,7 +2208,7 @@ static int winusbx_configure_endpoints(int sub_api, struct libusb_device_handle return LIBUSB_SUCCESS; } -static int winusbx_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface) +static int winusbx_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface) { struct libusb_context *ctx = HANDLE_CTX(dev_handle); struct winusb_device_handle_priv *handle_priv = usbi_get_device_handle_priv(dev_handle); @@ -2244,7 +2239,7 @@ static int winusbx_claim_interface(int sub_api, struct libusb_device_handle *dev switch (err) { case ERROR_BAD_COMMAND: // The device was disconnected - usbi_err(ctx, "could not access interface %d: %s", iface, windows_error_str(0)); + usbi_err(ctx, "could not access interface %u: %s", iface, windows_error_str(0)); return LIBUSB_ERROR_NO_DEVICE; default: // it may be that we're using the libusb0 filter driver. @@ -2287,7 +2282,7 @@ static int winusbx_claim_interface(int sub_api, struct libusb_device_handle *dev if (r != LIBUSB_SUCCESS) return r; if (!found_filter) { - usbi_err(ctx, "could not access interface %d: %s", iface, windows_error_str(err)); + usbi_err(ctx, "could not access interface %u: %s", iface, windows_error_str(err)); return LIBUSB_ERROR_ACCESS; } } @@ -2302,9 +2297,9 @@ static int winusbx_claim_interface(int sub_api, struct libusb_device_handle *dev file_handle = handle_priv->interface_handle[0].dev_handle; if (WinUSBX[sub_api].Initialize(file_handle, &winusb_handle)) { handle_priv->interface_handle[0].api_handle = winusb_handle; - usbi_warn(ctx, "auto-claimed interface 0 (required to claim %d with WinUSB)", iface); + usbi_warn(ctx, "auto-claimed interface 0 (required to claim %u with WinUSB)", iface); } else { - usbi_warn(ctx, "failed to auto-claim interface 0 (required to claim %d with WinUSB): %s", iface, windows_error_str(0)); + usbi_warn(ctx, "failed to auto-claim interface 0 (required to claim %u with WinUSB): %s", iface, windows_error_str(0)); return LIBUSB_ERROR_ACCESS; } } @@ -2319,19 +2314,19 @@ static int winusbx_claim_interface(int sub_api, struct libusb_device_handle *dev case ERROR_ALREADY_EXISTS: // already claimed return LIBUSB_ERROR_BUSY; default: - usbi_err(ctx, "could not claim interface %d: %s", iface, windows_error_str(0)); + usbi_err(ctx, "could not claim interface %u: %s", iface, windows_error_str(0)); return LIBUSB_ERROR_ACCESS; } } handle_priv->interface_handle[iface].dev_handle = handle_priv->interface_handle[0].dev_handle; } - usbi_dbg("claimed interface %d", iface); + usbi_dbg("claimed interface %u", iface); handle_priv->active_interface = iface; return LIBUSB_SUCCESS; } -static int winusbx_release_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface) +static int winusbx_release_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface) { struct winusb_device_handle_priv *handle_priv = usbi_get_device_handle_priv(dev_handle); struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev); @@ -2479,7 +2474,7 @@ static int winusbx_submit_control_transfer(int sub_api, struct usbi_transfer *it return LIBUSB_SUCCESS; } -static int winusbx_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, int iface, int altsetting) +static int winusbx_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface, uint8_t altsetting) { struct winusb_device_handle_priv *handle_priv = usbi_get_device_handle_priv(dev_handle); struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev); @@ -2493,7 +2488,7 @@ static int winusbx_set_interface_altsetting(int sub_api, struct libusb_device_ha return LIBUSB_ERROR_NOT_FOUND; } - if (!WinUSBX[sub_api].SetCurrentAlternateSetting(winusb_handle, (UCHAR)altsetting)) { + if (!WinUSBX[sub_api].SetCurrentAlternateSetting(winusb_handle, altsetting)) { usbi_err(HANDLE_CTX(dev_handle), "SetCurrentAlternateSetting failed: %s", windows_error_str(0)); return LIBUSB_ERROR_IO; } @@ -3549,7 +3544,7 @@ static void hid_close(int sub_api, struct libusb_device_handle *dev_handle) } } -static int hid_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface) +static int hid_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface) { struct winusb_device_handle_priv *handle_priv = usbi_get_device_handle_priv(dev_handle); struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev); @@ -3567,13 +3562,13 @@ static int hid_claim_interface(int sub_api, struct libusb_device_handle *dev_han handle_priv->interface_handle[iface].dev_handle = INTERFACE_CLAIMED; - usbi_dbg("claimed interface %d", iface); + usbi_dbg("claimed interface %u", iface); handle_priv->active_interface = iface; return LIBUSB_SUCCESS; } -static int hid_release_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface) +static int hid_release_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface) { struct winusb_device_handle_priv *handle_priv = usbi_get_device_handle_priv(dev_handle); struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev); @@ -3592,7 +3587,7 @@ static int hid_release_interface(int sub_api, struct libusb_device_handle *dev_h return LIBUSB_SUCCESS; } -static int hid_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, int iface, int altsetting) +static int hid_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface, uint8_t altsetting) { UNUSED(sub_api); UNUSED(iface); @@ -3617,7 +3612,8 @@ static int hid_submit_control_transfer(int sub_api, struct usbi_transfer *itrans WINUSB_SETUP_PACKET *setup = (WINUSB_SETUP_PACKET *)transfer->buffer; HANDLE hid_handle; OVERLAPPED *overlapped; - int current_interface, config; + int current_interface; + uint8_t config; size_t size; int r; @@ -3654,7 +3650,7 @@ static int hid_submit_control_transfer(int sub_api, struct usbi_transfer *itrans r = winusb_get_configuration(dev_handle, &config); if (r == LIBUSB_SUCCESS) { size = 1; - ((uint8_t *)transfer->buffer)[LIBUSB_CONTROL_SETUP_SIZE] = (uint8_t)config; + ((uint8_t *)transfer->buffer)[LIBUSB_CONTROL_SETUP_SIZE] = config; r = LIBUSB_COMPLETED; } break; @@ -3672,7 +3668,7 @@ static int hid_submit_control_transfer(int sub_api, struct usbi_transfer *itrans r = LIBUSB_COMPLETED; break; case LIBUSB_REQUEST_SET_INTERFACE: - r = hid_set_interface_altsetting(0, dev_handle, setup->Index, setup->Value); + r = hid_set_interface_altsetting(0, dev_handle, (uint8_t)setup->Index, (uint8_t)setup->Value); if (r == LIBUSB_SUCCESS) r = LIBUSB_COMPLETED; break; @@ -3951,7 +3947,7 @@ static void composite_close(int sub_api, struct libusb_device_handle *dev_handle hid_close(SUB_API_NOTSET, dev_handle); } -static int composite_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface) +static int composite_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface) { struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev); @@ -3962,7 +3958,7 @@ static int composite_claim_interface(int sub_api, struct libusb_device_handle *d claim_interface(priv->usb_interface[iface].sub_api, dev_handle, iface); } -static int composite_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, int iface, int altsetting) +static int composite_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface, uint8_t altsetting) { struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev); @@ -3973,7 +3969,7 @@ static int composite_set_interface_altsetting(int sub_api, struct libusb_device_ set_interface_altsetting(priv->usb_interface[iface].sub_api, dev_handle, iface, altsetting); } -static int composite_release_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface) +static int composite_release_interface(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface) { struct winusb_device_priv *priv = usbi_get_device_priv(dev_handle->dev); diff --git a/libusb/os/windows_winusb.h b/libusb/os/windows_winusb.h index 39ce6fe..88863ff 100644 --- a/libusb/os/windows_winusb.h +++ b/libusb/os/windows_winusb.h @@ -98,10 +98,10 @@ struct windows_usb_api_backend { void (*exit)(void); int (*open)(int sub_api, struct libusb_device_handle *dev_handle); void (*close)(int sub_api, struct libusb_device_handle *dev_handle); - int (*configure_endpoints)(int sub_api, struct libusb_device_handle *dev_handle, int iface); - int (*claim_interface)(int sub_api, struct libusb_device_handle *dev_handle, int iface); - int (*set_interface_altsetting)(int sub_api, struct libusb_device_handle *dev_handle, int iface, int altsetting); - int (*release_interface)(int sub_api, struct libusb_device_handle *dev_handle, int iface); + int (*configure_endpoints)(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface); + int (*claim_interface)(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface); + int (*set_interface_altsetting)(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface, uint8_t altsetting); + int (*release_interface)(int sub_api, struct libusb_device_handle *dev_handle, uint8_t iface); int (*clear_halt)(int sub_api, struct libusb_device_handle *dev_handle, unsigned char endpoint); int (*reset_device)(int sub_api, struct libusb_device_handle *dev_handle); int (*submit_bulk_transfer)(int sub_api, struct usbi_transfer *itransfer); diff --git a/libusb/version_nano.h b/libusb/version_nano.h index a81bd38..f648dfc 100644 --- a/libusb/version_nano.h +++ b/libusb/version_nano.h @@ -1 +1 @@ -#define LIBUSB_NANO 11513 +#define LIBUSB_NANO 11514 -- cgit v1.2.3