diff --git a/src/SDL_properties.c b/src/SDL_properties.c index 566ea51ba..5ac9478e3 100644 --- a/src/SDL_properties.c +++ b/src/SDL_properties.c @@ -375,6 +375,16 @@ int SDL_SetProperty(SDL_PropertiesID props, const char *name, void *value) return SDL_PrivateSetProperty(props, name, property); } +static void CleanupFreeableProperty(void *userdata, void *value) +{ + SDL_free(value); +} + +int SDL_SetFreeableProperty(SDL_PropertiesID props, const char *name, void *value) +{ + return SDL_SetPropertyWithCleanup(props, name, value, CleanupFreeableProperty, NULL); +} + static void CleanupSurface(void *userdata, void *value) { SDL_Surface *surface = (SDL_Surface *)value; diff --git a/src/SDL_properties_c.h b/src/SDL_properties_c.h index ee23ae8e8..d996fa12f 100644 --- a/src/SDL_properties_c.h +++ b/src/SDL_properties_c.h @@ -20,5 +20,6 @@ */ extern int SDL_InitProperties(void); +extern int SDL_SetFreeableProperty(SDL_PropertiesID props, const char *name, void *value); extern int SDL_SetSurfaceProperty(SDL_PropertiesID props, const char *name, SDL_Surface *surface); extern void SDL_QuitProperties(void);