Procházet zdrojové kódy

Fix incorrect player index when assigning a joystick the same index twice

Prior to this fix, we would hit the existing_instance >= 0 case and move the joystick
again to a different index than the one requested by the caller. It also breaks the assumption
that a SDL_JoystickID is only present in SDL_joystick_players at one location.
Cameron Gutman před 5 roky
rodič
revize
165ccaa85b
1 změnil soubory, kde provedl 3 přidání a 0 odebrání
  1. 3 0
      src/joystick/SDL_joystick.c

+ 3 - 0
src/joystick/SDL_joystick.c

@@ -160,6 +160,9 @@ SDL_SetJoystickIDForPlayerIndex(int player_index, SDL_JoystickID instance_id)
         SDL_joystick_players = new_players;
         SDL_memset(&SDL_joystick_players[SDL_joystick_player_count], 0xFF, (player_index - SDL_joystick_player_count + 1) * sizeof(SDL_joystick_players[0]));
         SDL_joystick_player_count = player_index + 1;
+    } else if (SDL_joystick_players[player_index] == instance_id) {
+        /* Joystick is already assigned the requested player index */
+        return SDL_TRUE;
     }
 
     SDL_joystick_players[player_index] = instance_id;