(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,68 +15330,67 @@ 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, "|"); bool checked_found = false;
unsigned checked = 0;
char* orig_val = setting->get_string_representation ?
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);
if (tmp_str_list.size > 0) for (tok = strtok_r(setting_values_cpy, "|", &save); tok;
tok = strtok_r(NULL, "|", &save))
{ {
unsigned i; i++;
char val_s[256], val_d[16];
unsigned size = (unsigned)
tmp_str_list.size;
bool checked_found = false;
unsigned checked = 0;
char* orig_val = setting->get_string_representation ?
strdup(setting->value.target.string) : setting->value.target.string;
snprintf(val_d, sizeof(val_d), "%d", setting->enum_idx);
for (i = 0; i < size; i++)
{
const char* val = tmp_str_list.elems[i].data;
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,
val_s,
val_d,
MENU_ENUM_LABEL_NO_ITEMS,
MENU_SETTING_DROPDOWN_SETTING_STRING_OPTIONS_ITEM,
i, 0, NULL))
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 (menu_entries_append(info->list, if (!checked_found && string_is_equal(tok, orig_val))
val,
val_d,
MENU_ENUM_LABEL_NO_ITEMS,
MENU_SETTING_DROPDOWN_SETTING_STRING_OPTIONS_ITEM,
i, 0, NULL))
count++;
if (!checked_found && string_is_equal(
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)
{ {
strlcpy(setting->value.target.string, orig_val, setting->size); strlcpy(setting->value.target.string, orig_val, setting->size);
free(orig_val); free(orig_val);
}
if (checked_found)
{
struct menu_state *menu_st = menu_state_get_ptr();
menu_file_list_cbs_t *cbs = (menu_file_list_cbs_t*)info->list->list[checked].actiondata;
if (cbs)
cbs->checked = true;
menu_st->selection_ptr = checked;
}
} }
string_list_deinitialize(&tmp_str_list); if (checked_found)
{
struct menu_state *menu_st = menu_state_get_ptr();
menu_file_list_cbs_t *cbs = (menu_file_list_cbs_t*)info->list->list[checked].actiondata;
if (cbs)
cbs->checked = true;
menu_st->selection_ptr = checked;
}
} }
break; break;
case ST_INT: case ST_INT:
@ -15686,50 +15685,43 @@ 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];
char *tok, *save;
unsigned i = 0;
bool checked_found = false;
unsigned checked = 0;
char *setting_values_cpy = strdup(setting->values);
string_list_initialize(&tmp_str_list); snprintf(val_d, sizeof(val_d), "%d", setting->enum_idx);
string_split_noalloc(&tmp_str_list,
setting->values, "|");
if (tmp_str_list.size > 0) for (tok = strtok_r(setting_values_cpy, "|", &save); tok;
tok = strtok_r(NULL, "|", &save))
{ {
unsigned i; i++;
char val_d[16]; if (menu_entries_append(info->list,
unsigned size = (unsigned)tmp_str_list.size; tok,
bool checked_found = false; val_d,
unsigned checked = 0; MENU_ENUM_LABEL_NO_ITEMS,
snprintf(val_d, sizeof(val_d), "%d", setting->enum_idx); MENU_SETTING_DROPDOWN_SETTING_STRING_OPTIONS_ITEM_SPECIAL, i, 0, NULL))
count++;
for (i = 0; i < size; i++) if ( !checked_found
&& string_is_equal(tok, setting->value.target.string))
{ {
if (menu_entries_append(info->list, checked = i;
tmp_str_list.elems[i].data, checked_found = true;
val_d,
MENU_ENUM_LABEL_NO_ITEMS,
MENU_SETTING_DROPDOWN_SETTING_STRING_OPTIONS_ITEM_SPECIAL, i, 0, NULL))
count++;
if ( !checked_found
&& string_is_equal(tmp_str_list.elems[i].data,
setting->value.target.string))
{
checked = i;
checked_found = true;
}
}
if (checked_found)
{
struct menu_state *menu_st = menu_state_get_ptr();
menu_file_list_cbs_t *cbs = (menu_file_list_cbs_t*)info->list->list[checked].actiondata;
if (cbs)
cbs->checked = true;
menu_st->selection_ptr = checked;
} }
} }
free(setting_values_cpy);
string_list_deinitialize(&tmp_str_list); if (checked_found)
{
struct menu_state *menu_st = menu_state_get_ptr();
menu_file_list_cbs_t *cbs = (menu_file_list_cbs_t*)info->list->list[checked].actiondata;
if (cbs)
cbs->checked = true;
menu_st->selection_ptr = checked;
}
} }
break; break;
case ST_INT: case ST_INT: