Fix shutting down HIDAPI device with multiple joysticks Using Wii U GameCube USB adapter with multiple controllers attached and restarting SDL input in a game results in extra joysticks with NULL name. HIDAPI_CleanupDeviceDriver() shut down joysticks by iterating through device->num_joysticks but each HIDAPI_JoystickDisconnected() decreases device->num_joysticks and shifts joysticks array down. Resulting in only half of controllers being shutdown. It worked with only 1 controller attached though. Disconnect HIDAPI device joystick 0 until there are none left.
diff --git a/src/joystick/hidapi/SDL_hidapijoystick.c b/src/joystick/hidapi/SDL_hidapijoystick.c
index ef9ee08..3248769 100644
--- a/src/joystick/hidapi/SDL_hidapijoystick.c
+++ b/src/joystick/hidapi/SDL_hidapijoystick.c
@@ -484,20 +484,18 @@ HIDAPI_SetupDeviceDriver(SDL_HIDAPI_Device *device)
static void
HIDAPI_CleanupDeviceDriver(SDL_HIDAPI_Device *device)
{
- int i;
-
if (!device->driver) {
/* Already cleaned up */
return;
}
/* Disconnect any joysticks */
- for (i = 0; i < device->num_joysticks; ++i) {
- SDL_Joystick *joystick = SDL_JoystickFromInstanceID(device->joysticks[i]);
+ while (device->num_joysticks) {
+ SDL_Joystick *joystick = SDL_JoystickFromInstanceID(device->joysticks[0]);
if (joystick) {
HIDAPI_JoystickClose(joystick);
}
- HIDAPI_JoystickDisconnected(device, device->joysticks[i]);
+ HIDAPI_JoystickDisconnected(device, device->joysticks[0]);
}
device->driver->FreeDevice(device);