mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-10-03 08:28:29 +00:00
Introduce formal policy for APIs that return strings.
This declares that any `const char *` returned from SDL is owned by SDL, and promises to be valid _at least_ until the next time the event queue runs, or SDL_Quit() is called, even if the thing that owns the string gets destroyed or changed before then. This is noted in the headers as "the SDL_GetStringRule", so this will both be greppable to find a detailed explaination in docs/README-strings.md and wikiheaders will automatically turn it into a link we can point at the appropriate documentation. Fixes #9902. (and several FIXMEs, both known and yet-undocumented.)
This commit is contained in:
@@ -1594,7 +1594,7 @@ static GamepadMapping_t *SDL_PrivateAddMappingForGUID(SDL_JoystickGUID jGUID, co
|
||||
/* Only overwrite the mapping if the priority is the same or higher. */
|
||||
if (pGamepadMapping->priority <= priority) {
|
||||
/* Update existing mapping */
|
||||
SDL_free(pGamepadMapping->name);
|
||||
SDL_FreeLater(pGamepadMapping->name); // this is returned in SDL_GetGamepadName.
|
||||
pGamepadMapping->name = pchName;
|
||||
SDL_free(pGamepadMapping->mapping);
|
||||
pGamepadMapping->mapping = pchMapping;
|
||||
@@ -3413,7 +3413,8 @@ const char * SDL_GetGamepadSerial(SDL_Gamepad *gamepad)
|
||||
if (!joystick) {
|
||||
return NULL;
|
||||
}
|
||||
return SDL_GetJoystickSerial(joystick);
|
||||
return SDL_GetJoystickSerial(joystick); // this already returns a SDL_FreeLater pointer.
|
||||
|
||||
}
|
||||
|
||||
Uint64 SDL_GetGamepadSteamHandle(SDL_Gamepad *gamepad)
|
||||
@@ -3680,7 +3681,7 @@ void SDL_QuitGamepadMappings(void)
|
||||
while (s_pSupportedGamepads) {
|
||||
pGamepadMap = s_pSupportedGamepads;
|
||||
s_pSupportedGamepads = s_pSupportedGamepads->next;
|
||||
SDL_free(pGamepadMap->name);
|
||||
SDL_FreeLater(pGamepadMap->name); // this is returned in SDL_GetGamepadName.
|
||||
SDL_free(pGamepadMap->mapping);
|
||||
SDL_free(pGamepadMap);
|
||||
}
|
||||
@@ -3826,8 +3827,8 @@ void SDL_GamepadHandleDelayedGuideButton(SDL_Joystick *joystick)
|
||||
const char *SDL_GetGamepadAppleSFSymbolsNameForButton(SDL_Gamepad *gamepad, SDL_GamepadButton button)
|
||||
{
|
||||
#ifdef SDL_JOYSTICK_MFI
|
||||
const char *IOS_GetAppleSFSymbolsNameForButton(SDL_Gamepad *gamepad, SDL_GamepadButton button);
|
||||
const char *retval;
|
||||
char *IOS_GetAppleSFSymbolsNameForButton(SDL_Gamepad *gamepad, SDL_GamepadButton button);
|
||||
char *retval;
|
||||
|
||||
SDL_LockJoysticks();
|
||||
{
|
||||
@@ -3837,9 +3838,11 @@ const char *SDL_GetGamepadAppleSFSymbolsNameForButton(SDL_Gamepad *gamepad, SDL_
|
||||
}
|
||||
SDL_UnlockJoysticks();
|
||||
|
||||
// retval was malloc'd by IOS_GetAppleSFSymbolsNameForButton
|
||||
if (retval && *retval) {
|
||||
return retval;
|
||||
return SDL_FreeLater(retval);
|
||||
}
|
||||
SDL_free(retval);
|
||||
#endif
|
||||
return NULL;
|
||||
}
|
||||
@@ -3847,8 +3850,8 @@ const char *SDL_GetGamepadAppleSFSymbolsNameForButton(SDL_Gamepad *gamepad, SDL_
|
||||
const char *SDL_GetGamepadAppleSFSymbolsNameForAxis(SDL_Gamepad *gamepad, SDL_GamepadAxis axis)
|
||||
{
|
||||
#ifdef SDL_JOYSTICK_MFI
|
||||
const char *IOS_GetAppleSFSymbolsNameForAxis(SDL_Gamepad *gamepad, SDL_GamepadAxis axis);
|
||||
const char *retval;
|
||||
char *IOS_GetAppleSFSymbolsNameForAxis(SDL_Gamepad *gamepad, SDL_GamepadAxis axis);
|
||||
char *retval;
|
||||
|
||||
SDL_LockJoysticks();
|
||||
{
|
||||
@@ -3858,9 +3861,11 @@ const char *SDL_GetGamepadAppleSFSymbolsNameForAxis(SDL_Gamepad *gamepad, SDL_Ga
|
||||
}
|
||||
SDL_UnlockJoysticks();
|
||||
|
||||
// retval was malloc'd by IOS_GetAppleSFSymbolsNameForAxis
|
||||
if (retval && *retval) {
|
||||
return retval;
|
||||
return SDL_FreeLater(retval);
|
||||
}
|
||||
SDL_free(retval);
|
||||
#endif
|
||||
return NULL;
|
||||
}
|
||||
|
Reference in New Issue
Block a user