summaryrefslogtreecommitdiff
path: root/libusb/os/linux_usbfs.c
diff options
context:
space:
mode:
authorDaniel Drake <dsd@gentoo.org>2008-05-29 12:35:01 +0100
committerDaniel Drake <dsd@gentoo.org>2008-05-29 12:35:01 +0100
commit514bb8790cfe8b93ccfff82bc17081b1030acce0 (patch)
tree8a59c368cbca414f2dc46532593ee7be463d5934 /libusb/os/linux_usbfs.c
parentd1292f8e7300051239a7ed2769d221dc7a6f9fca (diff)
downloadlibusb-514bb8790cfe8b93ccfff82bc17081b1030acce0.tar.gz
Refine libusb_set_configuration() semantics
Applications will generally want to set a configuration before claiming interfaces. The problem is that the interface may already be set, and someone else may have claimed an interface (meaning that all calls to set_configuration will fail, even if it's for the same configuration). There are now 2 options: 1. Use the new libusb_get_configuration() to determine active configuration before calling libusb_set_configuration() 2. Or just call libusb_set_configuration() as usual, which will do nothing if that configuration is already active.
Diffstat (limited to 'libusb/os/linux_usbfs.c')
-rw-r--r--libusb/os/linux_usbfs.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/libusb/os/linux_usbfs.c b/libusb/os/linux_usbfs.c
index 7dc6b6c..2e9e0e2 100644
--- a/libusb/os/linux_usbfs.c
+++ b/libusb/os/linux_usbfs.c
@@ -904,6 +904,20 @@ static void op_close(struct libusb_device_handle *dev_handle)
close(fd);
}
+static int op_get_configuration(struct libusb_device_handle *handle,
+ int *config)
+{
+ int r;
+ if (sysfs_can_relate_devices != 1)
+ return LIBUSB_ERROR_NOT_SUPPORTED;
+
+ r = sysfs_get_active_config(handle->dev, config);
+ if (*config == -1)
+ *config = 0;
+
+ return 0;
+}
+
static int op_set_configuration(struct libusb_device_handle *handle, int config)
{
struct linux_device_priv *priv = __device_priv(handle->dev);
@@ -1827,6 +1841,7 @@ const struct usbi_os_backend linux_usbfs_backend = {
.open = op_open,
.close = op_close,
+ .get_configuration = op_get_configuration,
.set_configuration = op_set_configuration,
.claim_interface = op_claim_interface,
.release_interface = op_release_interface,