From 65399f4c26f9a08d7eb5ce019169b9a2ae05bf94 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Mon, 11 Feb 2013 11:20:49 -0800 Subject: [PATCH] tree 8cbca1e6b293 parent 7ddddb71cec9 author Edward Rudd 1358030045 18000 committer Edward Rudd 1358030045 18000 revision 6820 branch default Consolidate iterating the SupportedControllers array also fix memory leak when controller mapping not found --- src/joystick/SDL_gamecontroller.c | 79 +++++++++---------------------- 1 file changed, 22 insertions(+), 57 deletions(-) diff --git a/src/joystick/SDL_gamecontroller.c b/src/joystick/SDL_gamecontroller.c index 9b737e4ad..7a87d0370 100644 --- a/src/joystick/SDL_gamecontroller.c +++ b/src/joystick/SDL_gamecontroller.c @@ -242,11 +242,24 @@ ControllerMapping_t *SDL_PrivateGetControllerMapping(int device_index) { return s_pXInputMapping; } + else #endif + { + SDL_JoystickGUID jGUID = SDL_JoystickGetDeviceGUID( device_index ); + ControllerMapping_t *pSupportedController = s_pSupportedControllers; + while ( pSupportedController ) + { + if ( !SDL_memcmp( &jGUID, &pSupportedController->guid, sizeof(jGUID) ) ) + { + return pSupportedController; + } + pSupportedController = pSupportedController->next; + } + } + return NULL; } - /* * convert a string to its enum equivalent */ @@ -681,19 +694,6 @@ SDL_GameControllerNameForIndex(int device_index) { return pSupportedController->name; } - else - { - SDL_JoystickGUID jGUID = SDL_JoystickGetDeviceGUID( device_index ); - pSupportedController = s_pSupportedControllers; - while ( pSupportedController ) - { - if ( !SDL_memcmp( &jGUID, &pSupportedController->guid, sizeof(jGUID) ) ) - { - return pSupportedController->name; - } - pSupportedController = pSupportedController->next; - } - } return NULL; } @@ -708,24 +708,6 @@ int SDL_IsGameController(int device_index) { return 1; } - else - { - SDL_JoystickGUID jGUID = SDL_JoystickGetDeviceGUID( device_index ); - pSupportedController = s_pSupportedControllers; - // debug code to help get the guid string for a new joystick - /* char szGUID[33]; - SDL_JoystickGetGUIDString( jGUID, szGUID, sizeof(szGUID) ); - printf( "%s\n", pchGUID ); - SDL_free( pchGUID );*/ - while ( pSupportedController ) - { - if ( !SDL_memcmp( &jGUID, &pSupportedController->guid, sizeof(jGUID) ) ) - { - return 1; - } - pSupportedController = pSupportedController->next; - } - } return 0; } @@ -760,37 +742,21 @@ SDL_GameControllerOpen(int device_index) gamecontrollerlist = gamecontrollerlist->next; } - // Create and initialize the joystick - gamecontroller = (SDL_GameController *) SDL_malloc((sizeof *gamecontroller)); - if (gamecontroller == NULL) { - SDL_OutOfMemory(); - return NULL; - } - + // Find a Controller Mapping pSupportedController = SDL_PrivateGetControllerMapping(device_index); - if ( !pSupportedController ) - { - SDL_JoystickGUID jGUID; - - jGUID = SDL_JoystickGetDeviceGUID( device_index ); - pSupportedController = s_pSupportedControllers; - while ( pSupportedController ) - { - if ( !SDL_memcmp( &jGUID, &pSupportedController->guid, sizeof(jGUID) ) ) - { - break; - } - - pSupportedController = pSupportedController->next; - } - } - if ( !pSupportedController ) { SDL_SetError("Couldn't find mapping for device (%d)", device_index ); return (NULL); } + // Create and initialize the joystick + gamecontroller = (SDL_GameController *) SDL_malloc((sizeof *gamecontroller)); + if (gamecontroller == NULL) { + SDL_OutOfMemory(); + return NULL; + } + SDL_memset(gamecontroller, 0, (sizeof *gamecontroller)); gamecontroller->joystick = SDL_JoystickOpen(device_index); if ( !gamecontroller->joystick ) { @@ -1024,7 +990,6 @@ SDL_GameControllerQuit(void) SDL_GameControllerClose(SDL_gamecontrollers); } - pControllerMap = s_pSupportedControllers; while ( s_pSupportedControllers ) { pControllerMap = s_pSupportedControllers;