SDL: testcontroller: free/allocate touchpads only when needed

From 984fcdaa8a7855516a8b84016c0c253680bec3af Mon Sep 17 00:00:00 2001
From: ceski <[EMAIL REDACTED]>
Date: Sun, 17 May 2026 07:21:08 -0700
Subject: [PATCH] testcontroller: free/allocate touchpads only when needed

---
 test/gamepadutils.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/test/gamepadutils.c b/test/gamepadutils.c
index 4da9522d16d41..6fff0b419bac8 100644
--- a/test/gamepadutils.c
+++ b/test/gamepadutils.c
@@ -706,6 +706,7 @@ static void FreeTouchpads(GamepadImage *ctx)
 void UpdateGamepadImageFromGamepad(GamepadImage *ctx, SDL_Gamepad *gamepad)
 {
     int i;
+    int num_touchpads;
 
     if (!ctx) {
         return;
@@ -763,9 +764,12 @@ void UpdateGamepadImageFromGamepad(GamepadImage *ctx, SDL_Gamepad *gamepad)
     ctx->connection_state = SDL_GetGamepadConnectionState(gamepad);
     ctx->battery_state = SDL_GetGamepadPowerInfo(gamepad, &ctx->battery_percent);
 
-    FreeTouchpads(ctx);
-    ctx->num_touchpads = SDL_GetNumGamepadTouchpads(gamepad);
-    ctx->num_touchpads = SDL_min(ctx->num_touchpads, MAX_TOUCHPADS);
+    num_touchpads = SDL_GetNumGamepadTouchpads(gamepad);
+    num_touchpads = SDL_min(num_touchpads, MAX_TOUCHPADS);
+    if (num_touchpads != ctx->num_touchpads) {
+        FreeTouchpads(ctx);
+        ctx->num_touchpads = num_touchpads;
+    }
     if (ctx->num_touchpads > 0) {
         ctx->touchpads = (GamepadTouchpad *)SDL_malloc(sizeof(*ctx->touchpads) * ctx->num_touchpads);
         if (ctx->touchpads) {