(menu_displaylist.c) Get rid of more string_list usage

This commit is contained in:
libretroadmin 2024-06-15 14:02:09 +02:00
parent 78acf23a9b
commit 01a7740f6f

View File

@ -15330,50 +15330,52 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type,
{ {
case ST_STRING_OPTIONS: case ST_STRING_OPTIONS:
{ {
struct string_list tmp_str_list = {0}; char val_d[16];
string_list_initialize(&tmp_str_list); char *tok, *save;
string_split_noalloc(&tmp_str_list, unsigned i = 0;
setting->values, "|");
if (tmp_str_list.size > 0)
{
unsigned i;
char val_s[256], val_d[16];
unsigned size = (unsigned)
tmp_str_list.size;
bool checked_found = false; bool checked_found = false;
unsigned checked = 0; unsigned checked = 0;
char* orig_val = setting->get_string_representation ? char* orig_val = setting->get_string_representation ?
strdup(setting->value.target.string) : setting->value.target.string; strdup(setting->value.target.string) : setting->value.target.string;
char *setting_values_cpy = strdup(setting->values);
snprintf(val_d, sizeof(val_d), "%d", setting->enum_idx); snprintf(val_d, sizeof(val_d), "%d", setting->enum_idx);
for (i = 0; i < size; i++) for (tok = strtok_r(setting_values_cpy, "|", &save); tok;
tok = strtok_r(NULL, "|", &save))
{ {
const char* val = tmp_str_list.elems[i].data; i++;
if (setting->get_string_representation) if (setting->get_string_representation)
{ {
strlcpy(setting->value.target.string, val, setting->size); char val_s[256];
strlcpy(setting->value.target.string, tok, setting->size);
setting->get_string_representation(setting, setting->get_string_representation(setting,
val_s, sizeof(val_s)); val_s, sizeof(val_s));
val = val_s;
}
if (menu_entries_append(info->list, if (menu_entries_append(info->list,
val, val_s,
val_d, val_d,
MENU_ENUM_LABEL_NO_ITEMS, MENU_ENUM_LABEL_NO_ITEMS,
MENU_SETTING_DROPDOWN_SETTING_STRING_OPTIONS_ITEM, MENU_SETTING_DROPDOWN_SETTING_STRING_OPTIONS_ITEM,
i, 0, NULL)) i, 0, NULL))
count++; count++;
}
else
{
if (menu_entries_append(info->list,
tok,
val_d,
MENU_ENUM_LABEL_NO_ITEMS,
MENU_SETTING_DROPDOWN_SETTING_STRING_OPTIONS_ITEM,
i, 0, NULL))
count++;
}
if (!checked_found && string_is_equal( if (!checked_found && string_is_equal(tok, orig_val))
tmp_str_list.elems[i].data,
orig_val))
{ {
checked = i; checked = i;
checked_found = true; checked_found = true;
} }
} }
free(setting_values_cpy);
if (setting->get_string_representation) if (setting->get_string_representation)
{ {
@ -15390,9 +15392,6 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type,
menu_st->selection_ptr = checked; menu_st->selection_ptr = checked;
} }
} }
string_list_deinitialize(&tmp_str_list);
}
break; break;
case ST_INT: case ST_INT:
{ {
@ -15686,38 +15685,34 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type,
{ {
case ST_STRING_OPTIONS: case ST_STRING_OPTIONS:
{ {
struct string_list tmp_str_list = {0};
string_list_initialize(&tmp_str_list);
string_split_noalloc(&tmp_str_list,
setting->values, "|");
if (tmp_str_list.size > 0)
{
unsigned i;
char val_d[16]; char val_d[16];
unsigned size = (unsigned)tmp_str_list.size; char *tok, *save;
unsigned i = 0;
bool checked_found = false; bool checked_found = false;
unsigned checked = 0; unsigned checked = 0;
char *setting_values_cpy = strdup(setting->values);
snprintf(val_d, sizeof(val_d), "%d", setting->enum_idx); snprintf(val_d, sizeof(val_d), "%d", setting->enum_idx);
for (i = 0; i < size; i++) for (tok = strtok_r(setting_values_cpy, "|", &save); tok;
tok = strtok_r(NULL, "|", &save))
{ {
i++;
if (menu_entries_append(info->list, if (menu_entries_append(info->list,
tmp_str_list.elems[i].data, tok,
val_d, val_d,
MENU_ENUM_LABEL_NO_ITEMS, MENU_ENUM_LABEL_NO_ITEMS,
MENU_SETTING_DROPDOWN_SETTING_STRING_OPTIONS_ITEM_SPECIAL, i, 0, NULL)) MENU_SETTING_DROPDOWN_SETTING_STRING_OPTIONS_ITEM_SPECIAL, i, 0, NULL))
count++; count++;
if ( !checked_found if ( !checked_found
&& string_is_equal(tmp_str_list.elems[i].data, && string_is_equal(tok, setting->value.target.string))
setting->value.target.string))
{ {
checked = i; checked = i;
checked_found = true; checked_found = true;
} }
} }
free(setting_values_cpy);
if (checked_found) if (checked_found)
{ {
@ -15728,9 +15723,6 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type,
menu_st->selection_ptr = checked; menu_st->selection_ptr = checked;
} }
} }
string_list_deinitialize(&tmp_str_list);
}
break; break;
case ST_INT: case ST_INT:
{ {