Browse Source

Fix love.joystick.setGamepadMapping breaking the mapping string when replacing an existing binding.

issue #1936.
Sasha Szpakowski 2 years ago
parent
commit
df7a55911d
1 changed files with 8 additions and 3 deletions
  1. 8 3
      src/modules/joystick/sdl/JoystickModule.cpp

+ 8 - 3
src/modules/joystick/sdl/JoystickModule.cpp

@@ -259,12 +259,17 @@ bool JoystickModule::setGamepadMapping(const std::string &guid, Joystick::Gamepa
 		if (endpos == std::string::npos)
 			endpos = mapstr.length() - 1;
 
-		mapstr.replace(findpos + 1, endpos - findpos + 1, insertstr);
+		mapstr.replace(findpos + 1, endpos - findpos, insertstr);
 	}
 	else
 	{
-		// Just append to the end if we don't need to replace anything.
-		mapstr += insertstr;
+		// Just append to the end (or before the platform section if that exists),
+		// if we don't need to replace anything.
+		size_t platformpos = mapstr.find("platform:");
+		if (platformpos != std::string::npos)
+			mapstr.insert(platformpos, insertstr);
+		else
+			mapstr += insertstr;
 	}
 
 	// 1 == added, 0 == updated, -1 == error.