tree 8cbca1e6b293
authorSam Lantinga <slouken@libsdl.org>
Mon, 11 Feb 2013 11:20:49 -0800
changeset 6841 90bba8d8e42a
parent 6840 9fb970f83002
child 6842 6ea07537baa2
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
src/joystick/SDL_gamecontroller.c
--- 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;