Browse Source

SDL_GetGamepads() follows the SDL_GetStringRule

Sam Lantinga 9 tháng trước cách đây
mục cha
commit
5ce0aacaa4
3 tập tin đã thay đổi với 10 bổ sung9 xóa
  1. 6 5
      include/SDL3/SDL_gamepad.h
  2. 1 1
      src/dynapi/SDL_dynapi_procs.h
  3. 3 3
      src/joystick/SDL_gamepad.c

+ 6 - 5
include/SDL3/SDL_gamepad.h

@@ -468,17 +468,18 @@ extern SDL_DECLSPEC SDL_bool SDLCALL SDL_HasGamepad(void);
 /**
  * Get a list of currently connected gamepads.
  *
- * \param count a pointer filled in with the number of gamepads returned.
- * \returns a 0 terminated array of joystick instance IDs which should be
- *          freed with SDL_free(), or NULL on failure; call SDL_GetError() for
- *          more details.
+ * The returned array follows the SDL_GetStringRule, and will be automatically freed later.
+ *
+ * \param count a pointer filled in with the number of gamepads returned, may be NULL.
+ * \returns a 0 terminated array of joystick instance IDs or NULL on failure; call SDL_GetError() for
+ *          more information.
  *
  * \since This function is available since SDL 3.0.0.
  *
  * \sa SDL_HasGamepad
  * \sa SDL_OpenGamepad
  */
-extern SDL_DECLSPEC SDL_JoystickID * SDLCALL SDL_GetGamepads(int *count);
+extern SDL_DECLSPEC const SDL_JoystickID * SDLCALL SDL_GetGamepads(int *count);
 
 /**
  * Check if the given joystick is supported by the gamepad interface.

+ 1 - 1
src/dynapi/SDL_dynapi_procs.h

@@ -317,7 +317,7 @@ SDL_DYNAPI_PROC(SDL_GamepadType,SDL_GetGamepadTypeForID,(SDL_JoystickID a),(a),r
 SDL_DYNAPI_PROC(SDL_GamepadType,SDL_GetGamepadTypeFromString,(const char *a),(a),return)
 SDL_DYNAPI_PROC(Uint16,SDL_GetGamepadVendor,(SDL_Gamepad *a),(a),return)
 SDL_DYNAPI_PROC(Uint16,SDL_GetGamepadVendorForID,(SDL_JoystickID a),(a),return)
-SDL_DYNAPI_PROC(SDL_JoystickID*,SDL_GetGamepads,(int *a),(a),return)
+SDL_DYNAPI_PROC(const SDL_JoystickID*,SDL_GetGamepads,(int *a),(a),return)
 SDL_DYNAPI_PROC(SDL_MouseButtonFlags,SDL_GetGlobalMouseState,(float *a, float *b),(a,b),return)
 SDL_DYNAPI_PROC(SDL_PropertiesID,SDL_GetGlobalProperties,(void),(),return)
 SDL_DYNAPI_PROC(SDL_Window*,SDL_GetGrabbedWindow,(void),(),return)

+ 3 - 3
src/joystick/SDL_gamepad.c

@@ -2396,11 +2396,11 @@ SDL_bool SDL_HasGamepad(void)
     return SDL_FALSE;
 }
 
-SDL_JoystickID *SDL_GetGamepads(int *count)
+const SDL_JoystickID *SDL_GetGamepads(int *count)
 {
     int num_joysticks = 0;
     int num_gamepads = 0;
-    SDL_JoystickID *joysticks = SDL_GetJoysticks(&num_joysticks);
+    SDL_JoystickID *joysticks = SDL_ClaimEventMemory(SDL_GetJoysticks(&num_joysticks));
     if (joysticks) {
         int i;
         for (i = num_joysticks - 1; i >= 0; --i) {
@@ -2414,7 +2414,7 @@ SDL_JoystickID *SDL_GetGamepads(int *count)
     if (count) {
         *count = num_gamepads;
     }
-    return joysticks;
+    return SDL_FreeLater(joysticks);
 }
 
 const char *SDL_GetGamepadNameForID(SDL_JoystickID instance_id)