diff --git a/src/joystick/SDL_gamecontroller.c b/src/joystick/SDL_gamecontroller.c index 46bbac486..b127ee735 100644 --- a/src/joystick/SDL_gamecontroller.c +++ b/src/joystick/SDL_gamecontroller.c @@ -663,21 +663,26 @@ static ControllerMapping_t *SDL_CreateMappingForWGIController(SDL_JoystickGUID g */ static ControllerMapping_t *SDL_PrivateGetControllerMappingForGUID(SDL_JoystickGUID guid, SDL_bool exact_match) { - ControllerMapping_t *mapping = s_pSupportedControllers; + ControllerMapping_t *mapping; SDL_JoystickGUID zero_crc_guid; + /* First check for exact match */ + for (mapping = s_pSupportedControllers; mapping; mapping = mapping->next) { + if (SDL_memcmp(&guid, &mapping->guid, sizeof(guid)) == 0) { + return mapping; + } + } + + /* Now check for match with no CRC */ SDL_memcpy(&zero_crc_guid, &guid, sizeof(guid)); zero_crc_guid.data[3] = 0; zero_crc_guid.data[4] = 0; zero_crc_guid.data[5] = 0; zero_crc_guid.data[6] = 0; - - while (mapping) { - if (SDL_memcmp(&guid, &mapping->guid, sizeof(guid)) == 0 || - SDL_memcmp(&zero_crc_guid, &mapping->guid, sizeof(guid)) == 0) { + for (mapping = s_pSupportedControllers; mapping; mapping = mapping->next) { + if (SDL_memcmp(&zero_crc_guid, &mapping->guid, sizeof(guid)) == 0) { return mapping; } - mapping = mapping->next; } if (!exact_match) {