From c172f36bf442614ed006facbf17cc09ab5f22942 Mon Sep 17 00:00:00 2001 From: Andrew Eikum Date: Wed, 31 Jul 2019 11:14:48 -0500 Subject: [PATCH] joystick: Ensure HIDAPI is initialized before calling it --- src/joystick/hidapi/SDL_hidapijoystick.c | 10 ++++++++++ src/joystick/linux/SDL_sysjoystick.c | 2 ++ 2 files changed, 12 insertions(+) diff --git a/src/joystick/hidapi/SDL_hidapijoystick.c b/src/joystick/hidapi/SDL_hidapijoystick.c index 8e5c96caf8f6d..c2d951961373b 100644 --- a/src/joystick/hidapi/SDL_hidapijoystick.c +++ b/src/joystick/hidapi/SDL_hidapijoystick.c @@ -99,6 +99,7 @@ static SDL_HIDAPI_DeviceDriver *SDL_HIDAPI_drivers[] = { static int SDL_HIDAPI_numdrivers = 0; static SDL_HIDAPI_Device *SDL_HIDAPI_devices; static int SDL_HIDAPI_numjoysticks = 0; +static SDL_bool initialized = SDL_FALSE; #if defined(SDL_USE_LIBUDEV) static const SDL_UDEV_Symbols * usyms = NULL; @@ -696,6 +697,10 @@ HIDAPI_JoystickInit(void) { int i; + if (initialized) { + return 0; + } + if (hid_init() < 0) { SDL_SetError("Couldn't initialize hidapi"); return -1; @@ -709,6 +714,9 @@ HIDAPI_JoystickInit(void) SDL_HIDAPIDriverHintChanged, NULL); HIDAPI_InitializeDiscovery(); HIDAPI_JoystickDetect(); + + initialized = SDL_TRUE; + return 0; } @@ -1059,6 +1067,8 @@ HIDAPI_JoystickQuit(void) SDL_HIDAPI_numjoysticks = 0; hid_exit(); + + initialized = SDL_FALSE; } SDL_JoystickDriver SDL_HIDAPI_JoystickDriver = diff --git a/src/joystick/linux/SDL_sysjoystick.c b/src/joystick/linux/SDL_sysjoystick.c index ad830919677c1..55b558ae52fca 100644 --- a/src/joystick/linux/SDL_sysjoystick.c +++ b/src/joystick/linux/SDL_sysjoystick.c @@ -120,6 +120,8 @@ IsJoystick(int fd, char *namebuf, const size_t namebuflen, SDL_JoystickGUID *gui } #ifdef SDL_JOYSTICK_HIDAPI + SDL_HIDAPI_JoystickDriver.Init(); + if (HIDAPI_IsDevicePresent(inpid.vendor, inpid.product, inpid.version)) { /* The HIDAPI driver is taking care of this device */ return 0;