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.
This commit is contained in:
Zack Middleton 2019-12-22 13:15:11 -08:00
parent d000a592ab
commit f0cee3edec

View File

@ -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);