SDL_mfijoystick.m: remove VLA, so that projects can be built with error on vla
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
diff --git a/src/joystick/iphoneos/SDL_mfijoystick.m b/src/joystick/iphoneos/SDL_mfijoystick.m
index 86e4810..2ffdab5 100644
--- a/src/joystick/iphoneos/SDL_mfijoystick.m
+++ b/src/joystick/iphoneos/SDL_mfijoystick.m
@@ -956,6 +956,7 @@ IOS_MFIJoystickUpdate(SDL_Joystick *joystick)
#endif
if (controller.extendedGamepad) {
+ SDL_bool isstack;
GCExtendedGamepad *gamepad = controller.extendedGamepad;
/* Axis order matches the XInput Windows mappings. */
@@ -969,9 +970,14 @@ IOS_MFIJoystickUpdate(SDL_Joystick *joystick)
};
/* Button order matches the XInput Windows mappings. */
- Uint8 buttons[joystick->nbuttons];
+ Uint8 *buttons = SDL_small_alloc(Uint8, joystick->nbuttons, &isstack);
int button_count = 0;
+ if (buttons == NULL) {
+ SDL_OutOfMemory();
+ return;
+ }
+
/* These buttons are part of the original MFi spec */
buttons[button_count++] = gamepad.buttonA.isPressed;
buttons[button_count++] = gamepad.buttonB.isPressed;
@@ -1088,12 +1094,20 @@ IOS_MFIJoystickUpdate(SDL_Joystick *joystick)
}
#endif /* ENABLE_MFI_SENSORS */
+ SDL_small_free(buttons, isstack);
} else if (controller.gamepad) {
+ SDL_bool isstack;
GCGamepad *gamepad = controller.gamepad;
/* Button order matches the XInput Windows mappings. */
- Uint8 buttons[joystick->nbuttons];
+ Uint8 *buttons = SDL_small_alloc(Uint8, joystick->nbuttons, &isstack);
int button_count = 0;
+
+ if (buttons == NULL) {
+ SDL_OutOfMemory();
+ return;
+ }
+
buttons[button_count++] = gamepad.buttonA.isPressed;
buttons[button_count++] = gamepad.buttonB.isPressed;
buttons[button_count++] = gamepad.buttonX.isPressed;
@@ -1108,6 +1122,8 @@ IOS_MFIJoystickUpdate(SDL_Joystick *joystick)
for (i = 0; i < button_count; i++) {
SDL_PrivateJoystickButton(joystick, i, buttons[i]);
}
+
+ SDL_small_free(buttons, isstack);
}
#if TARGET_OS_TV
else if (controller.microGamepad) {