The branch main has been updated by aokblast:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=9ca855653f32605f266e5e457581ec3e68fd4ff9

commit 9ca855653f32605f266e5e457581ec3e68fd4ff9
Author:     ShengYi Hung <aokbl...@freebsd.org>
AuthorDate: 2025-07-09 08:30:52 +0000
Commit:     ShengYi Hung <aokbl...@freebsd.org>
CommitDate: 2025-07-21 06:15:58 +0000

    libusb: implement libusb_hotplug_get_user_data
    
    libusb provides a function to get the callback userdata for a given
    callback since this structure is opaque to libusb user.
    
    Approved by:    markj (mentor), lwhsu (mentor)
    Sponsored by:   The FreeBSD Foundation
    MFC after:      2 weeks
    Differential Revision: https://reviews.freebsd.org/D51223
---
 lib/libusb/libusb.3           |  5 +++++
 lib/libusb/libusb.h           |  2 ++
 lib/libusb/libusb10_hotplug.c | 18 ++++++++++++++++++
 3 files changed, 25 insertions(+)

diff --git a/lib/libusb/libusb.3 b/lib/libusb/libusb.3
index da927f8985a8..2e2ac8b1e98b 100644
--- a/lib/libusb/libusb.3
+++ b/lib/libusb/libusb.3
@@ -781,6 +781,11 @@ This function unregisters a hotplug filter.
 This function releases the memory storage in
 .Fa pollfds ,
 and is safe to call when the argument is NULL.
+.Pp void *
+.Fn libusb_hotplug_get_user_data "struct libusb_context *ctx" 
"libusb_hotplug_callback_handle callback_handle"
+This function returns the user data from the opaque
+.Fa callback_handle ,
+or returns NULL if no matching handle is found.
 .Sh LIBUSB VERSION 0.1 COMPATIBILITY
 The library is also compliant with LibUSB version 0.1.12.
 .Pp
diff --git a/lib/libusb/libusb.h b/lib/libusb/libusb.h
index 1962152c0b68..520b81da3a75 100644
--- a/lib/libusb/libusb.h
+++ b/lib/libusb/libusb.h
@@ -594,6 +594,8 @@ typedef int (*libusb_hotplug_callback_fn)(libusb_context 
*ctx,
 
 int    libusb_hotplug_register_callback(libusb_context *ctx, 
libusb_hotplug_event events, libusb_hotplug_flag flags, int vendor_id, int 
product_id, int dev_class, libusb_hotplug_callback_fn cb_fn, void *user_data, 
libusb_hotplug_callback_handle *handle);
 void   libusb_hotplug_deregister_callback(libusb_context *ctx, 
libusb_hotplug_callback_handle handle);
+void   *libusb_hotplug_get_user_data(struct libusb_context *ctx,
+    libusb_hotplug_callback_handle callback_handle);
 
 /* Streams support */
 
diff --git a/lib/libusb/libusb10_hotplug.c b/lib/libusb/libusb10_hotplug.c
index 369539d4512e..9c46d4926bfa 100644
--- a/lib/libusb/libusb10_hotplug.c
+++ b/lib/libusb/libusb10_hotplug.c
@@ -414,3 +414,21 @@ void libusb_hotplug_deregister_callback(libusb_context 
*ctx,
 
        free(handle);
 }
+
+void *
+libusb_hotplug_get_user_data(struct libusb_context *ctx,
+    libusb_hotplug_callback_handle callback_handle)
+{
+       libusb_hotplug_callback_handle handle;
+
+       ctx = GET_CONTEXT(ctx);
+
+       HOTPLUG_LOCK(ctx);
+       TAILQ_FOREACH(handle, &ctx->hotplug_cbh, entry) {
+               if (handle == callback_handle)
+                       break;
+       }
+       HOTPLUG_UNLOCK(ctx);
+
+       return (handle);
+}

Reply via email to