git: bf2c6d23ad09 - main - Revert "libusb: change callback register handler to int"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 05 May 2026 16:49:04 UTC
The branch main has been updated by aokblast:
URL: https://cgit.FreeBSD.org/src/commit/?id=bf2c6d23ad0988a8b5dccebccdbc6fda9482c6a2
commit bf2c6d23ad0988a8b5dccebccdbc6fda9482c6a2
Author: ShengYi Hung <aokblast@FreeBSD.org>
AuthorDate: 2026-05-05 16:46:07 +0000
Commit: ShengYi Hung <aokblast@FreeBSD.org>
CommitDate: 2026-05-05 16:48:46 +0000
Revert "libusb: change callback register handler to int"
This reverts commit ce9ced951a0b9d004a3b007d4ac6e9087a1301a2.
We should handle backward compatibility before introducing this patch as
people may rely on old ABI.
---
lib/libusb/libusb.h | 5 +++--
lib/libusb/libusb10.c | 1 -
lib/libusb/libusb10.h | 2 --
lib/libusb/libusb10_hotplug.c | 50 ++++++++++++++++---------------------------
4 files changed, 21 insertions(+), 37 deletions(-)
diff --git a/lib/libusb/libusb.h b/lib/libusb/libusb.h
index ec60ce336e5a..46a2ed5eb8a6 100644
--- a/lib/libusb/libusb.h
+++ b/lib/libusb/libusb.h
@@ -293,6 +293,7 @@ struct libusb_context;
struct libusb_device;
struct libusb_transfer;
struct libusb_device_handle;
+struct libusb_hotplug_callback_handle_struct;
struct libusb_pollfd {
int fd;
@@ -321,7 +322,7 @@ typedef struct libusb_device_handle libusb_device_handle;
typedef struct libusb_pollfd libusb_pollfd;
typedef void (*libusb_pollfd_added_cb) (int fd, short events, void *user_data);
typedef void (*libusb_pollfd_removed_cb) (int fd, void *user_data);
-typedef int libusb_hotplug_callback_handle;
+typedef struct libusb_hotplug_callback_handle_struct *libusb_hotplug_callback_handle;
typedef struct libusb_device_descriptor {
uint8_t bLength;
@@ -631,7 +632,7 @@ typedef int (*libusb_hotplug_callback_fn)(libusb_context *ctx,
libusb_device *device, libusb_hotplug_event event, void *user_data);
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 callback_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);
diff --git a/lib/libusb/libusb10.c b/lib/libusb/libusb10.c
index 517630900f34..56c9caedab16 100644
--- a/lib/libusb/libusb10.c
+++ b/lib/libusb/libusb10.c
@@ -205,7 +205,6 @@ libusb_init_context(libusb_context **context,
memset(ctx, 0, sizeof(*ctx));
ctx->devd_pipe = -1;
- ctx->next_callback_id = 1;
debug = getenv("LIBUSB_DEBUG");
if (debug != NULL) {
diff --git a/lib/libusb/libusb10.h b/lib/libusb/libusb10.h
index 354ff003de3e..eced364ef857 100644
--- a/lib/libusb/libusb10.h
+++ b/lib/libusb/libusb10.h
@@ -80,7 +80,6 @@ struct libusb_hotplug_callback_handle_struct {
int devclass;
libusb_hotplug_callback_fn fn;
void *user_data;
- int id;
};
TAILQ_HEAD(libusb_device_head, libusb_device);
@@ -119,7 +118,6 @@ struct libusb_context {
libusb_pollfd_added_cb fd_added_cb;
libusb_pollfd_removed_cb fd_removed_cb;
void *fd_cb_user_data;
- int next_callback_id;
};
struct libusb_device {
diff --git a/lib/libusb/libusb10_hotplug.c b/lib/libusb/libusb10_hotplug.c
index fd979fd4db14..359c818b5720 100644
--- a/lib/libusb/libusb10_hotplug.c
+++ b/lib/libusb/libusb10_hotplug.c
@@ -176,9 +176,8 @@ libusb_hotplug_equal(libusb_device *_adev, libusb_device *_bdev)
}
static int
-libusb_hotplug_filter(libusb_context *ctx,
- struct libusb_hotplug_callback_handle_struct *pcbh, libusb_device *dev,
- libusb_hotplug_event event)
+libusb_hotplug_filter(libusb_context *ctx, libusb_hotplug_callback_handle pcbh,
+ libusb_device *dev, libusb_hotplug_event event)
{
if (!(pcbh->events & event))
return (0);
@@ -217,7 +216,8 @@ libusb_hotplug_scan(void *arg)
{
struct pollfd pfd;
struct libusb_device_head hotplug_devs;
- struct libusb_hotplug_callback_handle_struct *acbh, *bcbh;
+ libusb_hotplug_callback_handle acbh;
+ libusb_hotplug_callback_handle bcbh;
libusb_context *ctx = arg;
libusb_device *temp;
libusb_device *adev;
@@ -343,7 +343,7 @@ int libusb_hotplug_register_callback(libusb_context *ctx,
libusb_hotplug_callback_fn cb_fn, void *user_data,
libusb_hotplug_callback_handle *phandle)
{
- struct libusb_hotplug_callback_handle_struct *handle;
+ libusb_hotplug_callback_handle handle;
struct libusb_device *adev;
ctx = GET_CONTEXT(ctx);
@@ -365,17 +365,6 @@ int libusb_hotplug_register_callback(libusb_context *ctx,
if (handle == NULL)
return (LIBUSB_ERROR_NO_MEM);
- handle->events = events;
- handle->vendor = vendor_id;
- handle->product = product_id;
- handle->devclass = dev_class;
- handle->fn = cb_fn;
- handle->user_data = user_data;
- CTX_LOCK(ctx);
- if ((handle->id = ctx->next_callback_id++) < 0)
- handle->id = ctx->next_callback_id = 1;
- CTX_UNLOCK(ctx);
-
HOTPLUG_LOCK(ctx);
if (ctx->hotplug_handler == NO_THREAD) {
libusb_hotplug_enumerate(ctx, &ctx->hotplug_devs);
@@ -384,6 +373,12 @@ int libusb_hotplug_register_callback(libusb_context *ctx,
&libusb_hotplug_scan, ctx) != 0)
ctx->hotplug_handler = NO_THREAD;
}
+ handle->events = events;
+ handle->vendor = vendor_id;
+ handle->product = product_id;
+ handle->devclass = dev_class;
+ handle->fn = cb_fn;
+ handle->user_data = user_data;
if (flags & LIBUSB_HOTPLUG_ENUMERATE) {
TAILQ_FOREACH(adev, &ctx->hotplug_devs, hotplug_entry) {
@@ -400,32 +395,23 @@ int libusb_hotplug_register_callback(libusb_context *ctx,
HOTPLUG_UNLOCK(ctx);
if (phandle != NULL)
- *phandle = handle->id;
+ *phandle = handle;
return (LIBUSB_SUCCESS);
}
void libusb_hotplug_deregister_callback(libusb_context *ctx,
- libusb_hotplug_callback_handle callback_handle)
+ libusb_hotplug_callback_handle handle)
{
- struct libusb_hotplug_callback_handle_struct *handle;
+ ctx = GET_CONTEXT(ctx);
- ctx = GET_CONTEXT(ctx);
-
- if (ctx == NULL || callback_handle == 0)
+ if (ctx == NULL || handle == NULL)
return;
HOTPLUG_LOCK(ctx);
- TAILQ_FOREACH(handle, &ctx->hotplug_cbh, entry) {
- if (handle->id == callback_handle)
- break;
- }
- if (handle == NULL)
- goto clean;
TAILQ_REMOVE(&ctx->hotplug_cbh, handle, entry);
libusb_interrupt_event_handler(ctx);
-
-clean:
HOTPLUG_UNLOCK(ctx);
+
free(handle);
}
@@ -433,13 +419,13 @@ void *
libusb_hotplug_get_user_data(struct libusb_context *ctx,
libusb_hotplug_callback_handle callback_handle)
{
- struct libusb_hotplug_callback_handle_struct *handle;
+ libusb_hotplug_callback_handle handle;
ctx = GET_CONTEXT(ctx);
HOTPLUG_LOCK(ctx);
TAILQ_FOREACH(handle, &ctx->hotplug_cbh, entry) {
- if (handle->id == callback_handle)
+ if (handle == callback_handle)
break;
}
HOTPLUG_UNLOCK(ctx);