PERFORCE change 183086 for review
Hans Petter Selasky
hselasky at FreeBSD.org
Mon Aug 30 19:14:13 UTC 2010
http://p4web.freebsd.org/@@183086?ac=10
Change 183086 by hselasky at hselasky_laptop001 on 2010/08/30 19:14:04
LibUSB:
- add missing function definitions for
libusb_get_driver(), libusb_get_driver_np(),
libusb_detach_kernel_driver(), libusb_detach_kernel_driver_np().
- reported by: Alexander Leidinger
Affected files ...
.. //depot/projects/usb/src/lib/libusb/libusb.3#23 edit
.. //depot/projects/usb/src/lib/libusb/libusb.h#17 edit
.. //depot/projects/usb/src/lib/libusb/libusb10.c#27 edit
Differences ...
==== //depot/projects/usb/src/lib/libusb/libusb.3#23 (text+ko) ====
@@ -256,12 +256,37 @@
.Pp
.
.Ft int
+.Fn libusb_get_driver "libusb_device_handle *devh" "int interface" "char *name" "int namelen"
+or
+.Ft int
+.Fn libusb_get_driver_np "libusb_device_handle *devh" "int interface" "char *name" "int namelen"
+Gets the name of the driver attached to the given
+.Fa device
+and
+.Fa interface
+into the buffer given by
+.Fa name
+and
+.Fa namelen .
+Returns 0 on success, LIBUSB_ERROR_NOT_FOUND if no kernel driver is attached
+to the given interface and LIBUSB_ERROR_INVALID_PARAM if the interface does
+not exist.
+This function is non-portable.
+The buffer pointed to by
+.Fa name
+is only zero terminated on success.
+.
+.Pp
+.
+.Ft int
.Fn libusb_detach_kernel_driver "libusb_device_handle *devh" "int interface"
-Detach a kernel driver from an interface. This is needed to claim an interface
-required by a kernel driver. Returns 0 on success, LIBUSB_ERROR_NOT_FOUND if
-no kernel driver was active, LIBUSB_ERROR_INVALID_PARAM if the interface does not
-exist, LIBUSB_ERROR_NO_DEVICE if the device has been disconnected and a
-LIBUSB_ERROR code on failure.
+or
+.Ft int
+.Fn libusb_detach_kernel_driver_np "libusb_device_handle *devh" "int interface"
+Detach a kernel driver from an interface.
+This is needed to claim an interface required by a kernel driver.
+Returns 0 on success, LIBUSB_ERROR_NOT_FOUND if no kernel driver was active,
+LIBUSB_ERROR_INVALID_PARAM if the interface does not exist, LIBUSB_ERROR_NO_DEVICE if the device has been disconnected and a LIBUSB_ERROR code on failure. This function is non-portable.
.
.Pp
.
==== //depot/projects/usb/src/lib/libusb/libusb.h#17 (text+ko) ====
@@ -319,6 +319,9 @@
int libusb_reset_device(libusb_device_handle * devh);
int libusb_check_connected(libusb_device_handle * devh);
int libusb_kernel_driver_active(libusb_device_handle * devh, int interface);
+int libusb_get_driver_np(libusb_device_handle * devh, int interface, char *name, int namelen);
+int libusb_get_driver(libusb_device_handle * devh, int interface, char *name, int namelen);
+int libusb_detach_kernel_driver_np(libusb_device_handle * devh, int interface);
int libusb_detach_kernel_driver(libusb_device_handle * devh, int interface);
int libusb_attach_kernel_driver(libusb_device_handle * devh, int interface);
int libusb_set_interface_alt_setting(libusb_device_handle * devh, int interface_number, int alternate_setting);
==== //depot/projects/usb/src/lib/libusb/libusb10.c#27 (text+ko) ====
@@ -487,7 +487,6 @@
uint8_t i;
dev = libusb_get_device(pdev);
-
if (dev == NULL)
return (LIBUSB_ERROR_INVALID_PARAM);
@@ -634,6 +633,8 @@
return (LIBUSB_ERROR_INVALID_PARAM);
dev = libusb_get_device(pdev);
+ if (dev == NULL)
+ return (LIBUSB_ERROR_INVALID_PARAM);
CTX_LOCK(dev->ctx);
err = libusb20_tr_open(xfer, 0, 0, endpoint);
@@ -661,7 +662,7 @@
dev = libusb_get_device(pdev);
if (dev == NULL)
- return (LIBUSB20_ERROR_INVALID_PARAM);
+ return (LIBUSB_ERROR_INVALID_PARAM);
libusb10_cancel_all_transfer(dev);
@@ -684,7 +685,7 @@
dev = libusb_get_device(pdev);
if (dev == NULL)
- return (LIBUSB20_ERROR_INVALID_PARAM);
+ return (LIBUSB_ERROR_INVALID_PARAM);
err = libusb20_dev_check_connected(pdev);
@@ -702,6 +703,45 @@
}
int
+libusb_get_driver_np(struct libusb20_device *pdev, int interface,
+ char *name, int namelen)
+{
+ return (libusb_get_driver(pdev, interface, name, namelen));
+}
+
+int
+libusb_get_driver(struct libusb20_device *pdev, int interface,
+ char *name, int namelen)
+{
+ char *ptr;
+ int err;
+
+ if (pdev == NULL)
+ return (LIBUSB_ERROR_INVALID_PARAM);
+ if (namelen < 1)
+ return (LIBUSB_ERROR_INVALID_PARAM);
+
+ err = libusb20_dev_get_iface_desc(
+ pdev, interface, name, namelen);
+
+ if (err != 0)
+ return (LIBUSB_ERROR_OTHER);
+
+ /* we only want the driver name */
+ ptr = strstr(name, ":");
+ if (ptr != NULL)
+ *ptr = 0;
+
+ return (0);
+}
+
+int
+libusb_detach_kernel_driver_np(struct libusb20_device *pdev, int interface)
+{
+ return (libusb_detach_kernel_driver(pdev, interface));
+}
+
+int
libusb_detach_kernel_driver(struct libusb20_device *pdev, int interface)
{
int err;
@@ -712,7 +752,7 @@
err = libusb20_dev_detach_kernel_driver(
pdev, interface);
- return (err ? LIBUSB20_ERROR_OTHER : 0);
+ return (err ? LIBUSB_ERROR_OTHER : 0);
}
int
More information about the p4-projects
mailing list