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
1 changed files with 3 additions and 5 deletions

View File

@ -484,20 +484,18 @@ HIDAPI_SetupDeviceDriver(SDL_HIDAPI_Device *device)
static void static void
HIDAPI_CleanupDeviceDriver(SDL_HIDAPI_Device *device) HIDAPI_CleanupDeviceDriver(SDL_HIDAPI_Device *device)
{ {
int i;
if (!device->driver) { if (!device->driver) {
/* Already cleaned up */ /* Already cleaned up */
return; return;
} }
/* Disconnect any joysticks */ /* Disconnect any joysticks */
for (i = 0; i < device->num_joysticks; ++i) { while (device->num_joysticks) {
SDL_Joystick *joystick = SDL_JoystickFromInstanceID(device->joysticks[i]); SDL_Joystick *joystick = SDL_JoystickFromInstanceID(device->joysticks[0]);
if (joystick) { if (joystick) {
HIDAPI_JoystickClose(joystick); HIDAPI_JoystickClose(joystick);
} }
HIDAPI_JoystickDisconnected(device, device->joysticks[i]); HIDAPI_JoystickDisconnected(device, device->joysticks[0]);
} }
device->driver->FreeDevice(device); device->driver->FreeDevice(device);