tree 8cbca1e6b293
parent 7ddddb71cec9
author Edward Rudd <urkle@outoforder.cc> 1358030045 18000
committer Edward Rudd <urkle@outoforder.cc> 1358030045 18000
revision 6820
branch default
Consolidate iterating the SupportedControllers array
also fix memory leak when controller mapping not found
--- a/src/joystick/SDL_gamecontroller.c Mon Feb 11 11:09:55 2013 -0800
+++ b/src/joystick/SDL_gamecontroller.c Mon Feb 11 11:20:49 2013 -0800
@@ -242,11 +242,24 @@
{
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 @@
{
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 @@
{
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 @@
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_GameControllerClose(SDL_gamecontrollers);
}
- pControllerMap = s_pSupportedControllers;
while ( s_pSupportedControllers )
{
pControllerMap = s_pSupportedControllers;