Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Commit

Permalink
tree 8cbca1e6b293
Browse files Browse the repository at this point in the history
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
  • Loading branch information
slouken committed Feb 11, 2013
1 parent 7e8b58e commit 359f272
Showing 1 changed file with 22 additions and 57 deletions.
79 changes: 22 additions & 57 deletions src/joystick/SDL_gamecontroller.c
Expand Up @@ -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
*/
Expand Down Expand Up @@ -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;
}

Expand All @@ -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;
}

Expand Down Expand Up @@ -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 ) {
Expand Down Expand Up @@ -1024,7 +990,6 @@ SDL_GameControllerQuit(void)
SDL_GameControllerClose(SDL_gamecontrollers);
}

pControllerMap = s_pSupportedControllers;
while ( s_pSupportedControllers )
{
pControllerMap = s_pSupportedControllers;
Expand Down

0 comments on commit 359f272

Please sign in to comment.