From 42ce72be3c1706c25567ede7ad38fcc7e92abfe4 Mon Sep 17 00:00:00 2001
From: Dmitry Marakasov <[EMAIL REDACTED]>
Date: Fri, 24 Oct 2025 16:00:24 +0300
Subject: [PATCH] Fix libusb get_port_numbers signature for FreeBSD
---
src/misc/SDL_libusb.c | 4 ++++
src/misc/SDL_libusb.h | 4 ++++
2 files changed, 8 insertions(+)
diff --git a/src/misc/SDL_libusb.c b/src/misc/SDL_libusb.c
index 8497d878b5ca4..0b7da1f3e58c8 100644
--- a/src/misc/SDL_libusb.c
+++ b/src/misc/SDL_libusb.c
@@ -65,7 +65,11 @@ bool SDL_InitLibUSB(SDL_LibUSBContext **ctx)
LOAD_LIBUSB_SYMBOL(int (LIBUSB_CALL *)(libusb_device *, uint8_t, struct libusb_config_descriptor **), get_config_descriptor)
LOAD_LIBUSB_SYMBOL(void (LIBUSB_CALL *)(struct libusb_config_descriptor *), free_config_descriptor)
LOAD_LIBUSB_SYMBOL(uint8_t (LIBUSB_CALL *)(libusb_device *), get_bus_number)
+#ifdef SDL_PLATFORM_FREEBSD
+ LOAD_LIBUSB_SYMBOL(int (LIBUSB_CALL *)(libusb_device *dev, uint8_t *port_numbers, uint8_t port_numbers_len), get_port_numbers)
+#else
LOAD_LIBUSB_SYMBOL(int (LIBUSB_CALL *)(libusb_device *dev, uint8_t *port_numbers, int port_numbers_len), get_port_numbers)
+#endif
LOAD_LIBUSB_SYMBOL(uint8_t (LIBUSB_CALL *)(libusb_device *), get_device_address)
LOAD_LIBUSB_SYMBOL(int (LIBUSB_CALL *)(libusb_device *, libusb_device_handle **), open)
LOAD_LIBUSB_SYMBOL(void (LIBUSB_CALL *)(libusb_device_handle *), close)
diff --git a/src/misc/SDL_libusb.h b/src/misc/SDL_libusb.h
index 896916f623591..4e43b7f0994d0 100644
--- a/src/misc/SDL_libusb.h
+++ b/src/misc/SDL_libusb.h
@@ -43,7 +43,11 @@ typedef struct SDL_LibUSBContext
);
void (LIBUSB_CALL *free_config_descriptor)(struct libusb_config_descriptor *config);
uint8_t (LIBUSB_CALL *get_bus_number)(libusb_device *dev);
+#ifdef SDL_PLATFORM_FREEBSD
+ int (LIBUSB_CALL *get_port_numbers)(libusb_device *dev, uint8_t *port_numbers, uint8_t port_numbers_len);
+#else
int (LIBUSB_CALL *get_port_numbers)(libusb_device *dev, uint8_t *port_numbers, int port_numbers_len);
+#endif
uint8_t (LIBUSB_CALL *get_device_address)(libusb_device *dev);
int (LIBUSB_CALL *open)(libusb_device *dev, libusb_device_handle **dev_handle);
void (LIBUSB_CALL *close)(libusb_device_handle *dev_handle);