diff --git a/menu/menu_entries.c b/menu/menu_entries.c index 6a39a9a4a8..a56088c004 100644 --- a/menu/menu_entries.c +++ b/menu/menu_entries.c @@ -653,7 +653,7 @@ bool menu_entries_ctl(enum menu_entries_ctl_state state, void *data) break; case MENU_ENTRIES_CTL_SETTINGS_DEINIT: if (menu_entries_list_settings) - menu_setting_free(menu_entries_list_settings); + menu_setting_ctl(MENU_SETTING_CTL_FREE, menu_entries_list_settings); menu_entries_list_settings = NULL; break; case MENU_ENTRIES_CTL_SETTINGS_INIT: diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 74b35b3347..2ec43e843d 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -7357,12 +7357,12 @@ bool menu_setting_action_right(rarch_setting_t *setting, bool wraparound) return true; } -void menu_setting_free(rarch_setting_t *list) +static bool menu_setting_free(void *data) { - rarch_setting_t *setting = list; + rarch_setting_t *setting = (rarch_setting_t*)data; - if (!list) - return; + if (!data) + return false; for (; menu_setting_get_type(setting) != ST_NONE; menu_settings_list_increment(&setting)) { @@ -7386,7 +7386,9 @@ void menu_setting_free(rarch_setting_t *list) } } - free(list); + free(data); + + return true; } /** @@ -7568,6 +7570,8 @@ bool menu_setting_ctl(enum menu_setting_ctl_state state, void *data) return false; } return true; + case MENU_SETTING_CTL_FREE: + return menu_setting_free(data); case MENU_SETTING_CTL_NONE: default: break; diff --git a/menu/menu_setting.h b/menu/menu_setting.h index bb321ffcbe..94b3465ac0 100644 --- a/menu/menu_setting.h +++ b/menu/menu_setting.h @@ -66,6 +66,7 @@ enum setting_flags enum menu_setting_ctl_state { MENU_SETTING_CTL_NONE = 0, + MENU_SETTING_CTL_FREE, MENU_SETTING_CTL_IS_OF_PATH_TYPE }; @@ -317,8 +318,6 @@ void menu_setting_get_label(void *data, char *s, size_t len, unsigned *w, unsigned type, const char *menu_label, const char *label, unsigned idx); -void menu_setting_free(rarch_setting_t *list); - /** * setting_new: * @mask : Bitmask of settings to include.