menu_displaylist_info - reduce stack usage - exts no longer

a fixed size path
This commit is contained in:
twinaphex 2017-09-28 01:37:39 +02:00
parent b253ea7b08
commit 72f42b602f
5 changed files with 154 additions and 90 deletions

View File

@ -629,10 +629,11 @@ end:
static int general_push(menu_displaylist_info_t *info, static int general_push(menu_displaylist_info_t *info,
unsigned id, enum menu_displaylist_ctl_state state) unsigned id, enum menu_displaylist_ctl_state state)
{ {
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
core_info_list_t *list = NULL; char *newstring2 = NULL;
menu_handle_t *menu = NULL; core_info_list_t *list = NULL;
rarch_system_info_t *system = runloop_get_system_info(); menu_handle_t *menu = NULL;
rarch_system_info_t *system = runloop_get_system_info();
struct retro_system_info *system_menu = &system->info; struct retro_system_info *system_menu = &system->info;
if (!menu_driver_ctl(RARCH_MENU_CTL_DRIVER_DATA_GET, &menu)) if (!menu_driver_ctl(RARCH_MENU_CTL_DRIVER_DATA_GET, &menu))
@ -666,52 +667,60 @@ static int general_push(menu_displaylist_info_t *info,
break; break;
} }
newstring2 = (char*)malloc(PATH_MAX_LENGTH * sizeof(char));
newstring2[0] = '\0';
switch (id) switch (id)
{ {
case PUSH_ARCHIVE_OPEN: case PUSH_ARCHIVE_OPEN:
if (system_menu && system_menu->valid_extensions) if (system_menu && system_menu->valid_extensions)
{ {
if (*system_menu->valid_extensions) if (*system_menu->valid_extensions)
strlcpy(info->exts, system_menu->valid_extensions, strlcpy(newstring2, system_menu->valid_extensions,
sizeof(info->exts)); PATH_MAX_LENGTH * sizeof(char));
} }
else else
strlcpy(info->exts, system->valid_extensions, sizeof(info->exts)); {
strlcpy(newstring2, system->valid_extensions,
PATH_MAX_LENGTH * sizeof(char));
}
break; break;
case PUSH_DEFAULT: case PUSH_DEFAULT:
if (menu_setting_get_browser_selection_type(info->setting) == ST_DIR)
{ {
} char *new_exts = info->exts;
else if (system_menu && system_menu->valid_extensions)
{
if (*system_menu->valid_extensions)
strlcpy(info->exts, system_menu->valid_extensions,
sizeof(info->exts));
}
else
{
if (!string_is_empty(system->valid_extensions))
strlcpy(info->exts, system->valid_extensions, sizeof(info->exts));
}
{
union string_list_elem_attr attr;
size_t path_size = PATH_MAX_LENGTH * sizeof(char);
char *newstring2 = (char*)malloc(PATH_MAX_LENGTH * sizeof(char));
struct string_list *str_list3 = string_split(info->exts, "|");
newstring2[0] = '\0'; if (menu_setting_get_browser_selection_type(info->setting) == ST_DIR)
attr.i = 0; {
}
else if (system_menu && system_menu->valid_extensions)
{
if (*system_menu->valid_extensions)
new_exts = strdup(system_menu->valid_extensions);
}
else
{
if (!string_is_empty(system->valid_extensions))
new_exts = strdup(system->valid_extensions);
}
{
union string_list_elem_attr attr;
size_t path_size = PATH_MAX_LENGTH * sizeof(char);
struct string_list *str_list3 = string_split(new_exts, "|");
attr.i = 0;
#ifdef HAVE_IBXM #ifdef HAVE_IBXM
string_list_append(str_list3, "s3m", attr); string_list_append(str_list3, "s3m", attr);
string_list_append(str_list3, "mod", attr); string_list_append(str_list3, "mod", attr);
string_list_append(str_list3, "xm", attr); string_list_append(str_list3, "xm", attr);
#endif #endif
string_list_join_concat(newstring2, path_size, string_list_join_concat(newstring2, path_size,
str_list3, "|"); str_list3, "|");
string_list_free(str_list3); string_list_free(str_list3);
strlcpy(info->exts, newstring2, sizeof(info->exts)); }
free(newstring2);
} }
break; break;
case PUSH_ARCHIVE_OPEN_DETECT_CORE: case PUSH_ARCHIVE_OPEN_DETECT_CORE:
@ -722,8 +731,8 @@ static int general_push(menu_displaylist_info_t *info,
char *newstring = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); char *newstring = (char*)malloc(PATH_MAX_LENGTH * sizeof(char));
struct string_list *str_list2 = string_list_new(); struct string_list *str_list2 = string_list_new();
newstring[0] = '\0'; newstring[0] = '\0';
attr.i = 0; attr.i = 0;
if (system_menu && system_menu->valid_extensions) if (system_menu && system_menu->valid_extensions)
{ {
@ -765,14 +774,9 @@ static int general_push(menu_displaylist_info_t *info,
string_list_join_concat(newstring, path_size, string_list_join_concat(newstring, path_size,
str_list2, "|"); str_list2, "|");
strlcpy(info->exts, newstring, sizeof(info->exts));
{ {
union string_list_elem_attr attr; union string_list_elem_attr attr;
char *newstring2 = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); struct string_list *str_list3 = string_split(newstring, "|");
struct string_list *str_list3 = string_split(info->exts, "|");
newstring2[0] = '\0';
attr.i = 0; attr.i = 0;
#ifdef HAVE_IBXM #ifdef HAVE_IBXM
@ -783,8 +787,6 @@ static int general_push(menu_displaylist_info_t *info,
string_list_join_concat(newstring2, path_size, string_list_join_concat(newstring2, path_size,
str_list3, "|"); str_list3, "|");
string_list_free(str_list3); string_list_free(str_list3);
strlcpy(info->exts, newstring2, sizeof(info->exts));
free(newstring2);
} }
free(newstring); free(newstring);
string_list_free(str_list2); string_list_free(str_list2);
@ -804,20 +806,31 @@ static int general_push(menu_displaylist_info_t *info,
if (settings->bools.multimedia_builtin_mediaplayer_enable) if (settings->bools.multimedia_builtin_mediaplayer_enable)
{ {
libretro_ffmpeg_retro_get_system_info(&sysinfo); libretro_ffmpeg_retro_get_system_info(&sysinfo);
strlcat(info->exts, "|", sizeof(info->exts)); strlcat(newstring2, "|", PATH_MAX_LENGTH * sizeof(char));
strlcat(info->exts, sysinfo.valid_extensions, sizeof(info->exts)); strlcat(newstring2, sysinfo.valid_extensions,
PATH_MAX_LENGTH * sizeof(char));
} }
#endif #endif
#ifdef HAVE_IMAGEVIEWER #ifdef HAVE_IMAGEVIEWER
if (settings->bools.multimedia_builtin_imageviewer_enable) if (settings->bools.multimedia_builtin_imageviewer_enable)
{ {
libretro_imageviewer_retro_get_system_info(&sysinfo); libretro_imageviewer_retro_get_system_info(&sysinfo);
strlcat(info->exts, "|", sizeof(info->exts)); strlcat(newstring2, "|",
strlcat(info->exts, sysinfo.valid_extensions, sizeof(info->exts)); PATH_MAX_LENGTH * sizeof(char));
strlcat(newstring2, sysinfo.valid_extensions,
PATH_MAX_LENGTH * sizeof(char));
} }
#endif #endif
} }
if (!string_is_empty(newstring2))
{
if (info->exts && !string_is_empty(info->exts))
free(info->exts);
info->exts = strdup(newstring2);
}
free(newstring2);
return deferred_push_dlist(info, state); return deferred_push_dlist(info, state);
} }

View File

@ -1864,8 +1864,9 @@ static void xmb_init_horizontal_list(xmb_handle_t *xmb)
strlcpy(info.label, strlcpy(info.label,
msg_hash_to_str(MENU_ENUM_LABEL_CONTENT_COLLECTION_LIST), msg_hash_to_str(MENU_ENUM_LABEL_CONTENT_COLLECTION_LIST),
sizeof(info.label)); sizeof(info.label));
strlcpy(info.exts,
file_path_str(FILE_PATH_LPL_EXTENSION_NO_DOT), sizeof(info.exts)); info.exts = strdup(
file_path_str(FILE_PATH_LPL_EXTENSION_NO_DOT));
info.type_default = FILE_TYPE_PLAIN; info.type_default = FILE_TYPE_PLAIN;
info.enum_idx = MENU_ENUM_LABEL_CONTENT_COLLECTION_LIST; info.enum_idx = MENU_ENUM_LABEL_CONTENT_COLLECTION_LIST;
@ -4378,8 +4379,8 @@ static bool xmb_menu_init_list(void *data)
strlcpy(info.label, strlcpy(info.label,
msg_hash_to_str(MENU_ENUM_LABEL_MAIN_MENU), sizeof(info.label)); msg_hash_to_str(MENU_ENUM_LABEL_MAIN_MENU), sizeof(info.label));
strlcpy(info.exts, info.exts =
file_path_str(FILE_PATH_LPL_EXTENSION_NO_DOT), sizeof(info.exts)); strdup(file_path_str(FILE_PATH_LPL_EXTENSION_NO_DOT));
info.type_default = FILE_TYPE_PLAIN; info.type_default = FILE_TYPE_PLAIN;
info.enum_idx = MENU_ENUM_LABEL_MAIN_MENU; info.enum_idx = MENU_ENUM_LABEL_MAIN_MENU;

View File

@ -3989,9 +3989,12 @@ static bool menu_displaylist_push_internal(
{ {
filebrowser_clear_type(); filebrowser_clear_type();
info->type = 42; info->type = 42;
strlcpy(info->exts,
file_path_str(FILE_PATH_LPL_EXTENSION_NO_DOT), if (info->exts && !string_is_empty(info->exts))
sizeof(info->exts)); free(info->exts);
info->exts = strdup(
file_path_str(FILE_PATH_LPL_EXTENSION_NO_DOT));
strlcpy(info->label, strlcpy(info->label,
msg_hash_to_str(MENU_ENUM_LABEL_CONTENT_COLLECTION_LIST), msg_hash_to_str(MENU_ENUM_LABEL_CONTENT_COLLECTION_LIST),
sizeof(info->label)); sizeof(info->label));
@ -4004,9 +4007,11 @@ static bool menu_displaylist_push_internal(
{ {
filebrowser_clear_type(); filebrowser_clear_type();
info->type = 42; info->type = 42;
strlcpy(info->exts,
file_path_str(FILE_PATH_LPL_EXTENSION_NO_DOT), if (info->exts && !string_is_empty(info->exts))
sizeof(info->exts)); free(info->exts);
info->exts = strdup(
file_path_str(FILE_PATH_LPL_EXTENSION_NO_DOT));
strlcpy(info->label, strlcpy(info->label,
msg_hash_to_str(MENU_ENUM_LABEL_CONTENT_COLLECTION_LIST), msg_hash_to_str(MENU_ENUM_LABEL_CONTENT_COLLECTION_LIST),
sizeof(info->label)); sizeof(info->label));
@ -4019,9 +4024,11 @@ static bool menu_displaylist_push_internal(
{ {
filebrowser_clear_type(); filebrowser_clear_type();
info->type = 42; info->type = 42;
strlcpy(info->exts,
file_path_str(FILE_PATH_LPL_EXTENSION_NO_DOT), if (info->exts && !string_is_empty(info->exts))
sizeof(info->exts)); free(info->exts);
info->exts = strdup(
file_path_str(FILE_PATH_LPL_EXTENSION_NO_DOT));
strlcpy(info->label, strlcpy(info->label,
msg_hash_to_str(MENU_ENUM_LABEL_CONTENT_COLLECTION_LIST), msg_hash_to_str(MENU_ENUM_LABEL_CONTENT_COLLECTION_LIST),
sizeof(info->label)); sizeof(info->label));
@ -4054,9 +4061,11 @@ static bool menu_displaylist_push_internal(
filebrowser_clear_type(); filebrowser_clear_type();
info->type = 42; info->type = 42;
strlcpy(info->exts,
file_path_str(FILE_PATH_LPL_EXTENSION_NO_DOT), if (info->exts && !string_is_empty(info->exts))
sizeof(info->exts)); free(info->exts);
info->exts = strdup(
file_path_str(FILE_PATH_LPL_EXTENSION_NO_DOT));
strlcpy(info->label, strlcpy(info->label,
msg_hash_to_str(MENU_ENUM_LABEL_CONTENT_COLLECTION_LIST), msg_hash_to_str(MENU_ENUM_LABEL_CONTENT_COLLECTION_LIST),
sizeof(info->label)); sizeof(info->label));
@ -4302,6 +4311,9 @@ void menu_displaylist_info_free(menu_displaylist_info_t *info)
{ {
if (!info) if (!info)
return; return;
if (info->exts)
free(info->exts);
info->exts = NULL;
#if 0 #if 0
if (info->path) if (info->path)
free(info->path); free(info->path);
@ -4309,14 +4321,11 @@ void menu_displaylist_info_free(menu_displaylist_info_t *info)
free(info->path_b); free(info->path_b);
if (info->path_c) if (info->path_c)
free(info->path_c); free(info->path_c);
if (info->exts)
free(info->exts);
if (info->label) if (info->label)
free(info->label); free(info->label);
info->path = NULL; info->path = NULL;
info->path_b = NULL; info->path_b = NULL;
info->path_c = NULL; info->path_c = NULL;
info->exts = NULL;
info->label = NULL; info->label = NULL;
#endif #endif
} }
@ -4338,13 +4347,13 @@ void menu_displaylist_info_init(menu_displaylist_info_t *info)
info->path[0] = '\0'; info->path[0] = '\0';
info->path_b[0] = '\0'; info->path_b[0] = '\0';
info->path_c[0] = '\0'; info->path_c[0] = '\0';
info->exts[0] = '\0';
info->label[0] = '\0'; info->label[0] = '\0';
info->type = 0; info->type = 0;
info->type_default = 0; info->type_default = 0;
info->flags = 0; info->flags = 0;
info->label_hash = 0; info->label_hash = 0;
info->directory_ptr = 0; info->directory_ptr = 0;
info->exts = NULL;
info->list = NULL; info->list = NULL;
info->menu_list = NULL; info->menu_list = NULL;
info->setting = NULL; info->setting = NULL;
@ -6627,9 +6636,10 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list); menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
filebrowser_clear_type(); filebrowser_clear_type();
info->type_default = FILE_TYPE_RDB; info->type_default = FILE_TYPE_RDB;
strlcpy(info->exts, if (info->exts && !string_is_empty(info->exts))
file_path_str(FILE_PATH_RDB_EXTENSION), free(info->exts);
sizeof(info->exts)); info->exts = strdup(
file_path_str(FILE_PATH_RDB_EXTENSION));
info->enum_idx = MENU_ENUM_LABEL_CONTENT_COLLECTION_LIST; info->enum_idx = MENU_ENUM_LABEL_CONTENT_COLLECTION_LIST;
load_content = false; load_content = false;
use_filebrowser = true; use_filebrowser = true;
@ -6641,26 +6651,33 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
info->type_default = FILE_TYPE_CURSOR; info->type_default = FILE_TYPE_CURSOR;
load_content = false; load_content = false;
use_filebrowser = true; use_filebrowser = true;
strlcpy(info->exts, "dbc", sizeof(info->exts)); if (info->exts && !string_is_empty(info->exts))
free(info->exts);
info->exts = strdup("dbc");
strlcpy(info->path, settings->paths.directory_cursor, sizeof(info->path)); strlcpy(info->path, settings->paths.directory_cursor, sizeof(info->path));
break; break;
case DISPLAYLIST_CONFIG_FILES: case DISPLAYLIST_CONFIG_FILES:
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list); menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
filebrowser_clear_type(); filebrowser_clear_type();
info->type_default = FILE_TYPE_CONFIG; info->type_default = FILE_TYPE_CONFIG;
strlcpy(info->exts, "cfg", sizeof(info->exts)); if (info->exts && !string_is_empty(info->exts))
free(info->exts);
info->exts = strdup("cfg");
load_content = false; load_content = false;
use_filebrowser = true; use_filebrowser = true;
break; break;
case DISPLAYLIST_SHADER_PRESET: case DISPLAYLIST_SHADER_PRESET:
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list); menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
{ {
char new_exts[PATH_MAX_LENGTH];
struct string_list *str_list; struct string_list *str_list;
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_VULKAN) #if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_VULKAN)
union string_list_elem_attr attr; union string_list_elem_attr attr;
attr.i = 0; attr.i = 0;
#endif #endif
str_list = string_list_new();
new_exts[0] = '\0';
str_list = string_list_new();
filebrowser_clear_type(); filebrowser_clear_type();
info->type_default = FILE_TYPE_SHADER_PRESET; info->type_default = FILE_TYPE_SHADER_PRESET;
@ -6674,7 +6691,10 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
#ifdef HAVE_VULKAN #ifdef HAVE_VULKAN
string_list_append(str_list, "slangp", attr); string_list_append(str_list, "slangp", attr);
#endif #endif
string_list_join_concat(info->exts, sizeof(info->exts), str_list, "|"); string_list_join_concat(new_exts, sizeof(new_exts), str_list, "|");
if (info->exts && !string_is_empty(info->exts))
free(info->exts);
info->exts = strdup(new_exts);
string_list_free(str_list); string_list_free(str_list);
use_filebrowser = true; use_filebrowser = true;
} }
@ -6682,13 +6702,15 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
case DISPLAYLIST_SHADER_PASS: case DISPLAYLIST_SHADER_PASS:
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list); menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
{ {
char new_exts[PATH_MAX_LENGTH];
struct string_list *str_list; struct string_list *str_list;
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_VULKAN) #if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_VULKAN)
union string_list_elem_attr attr; union string_list_elem_attr attr;
attr.i = 0; attr.i = 0;
#endif #endif
str_list = string_list_new(); new_exts[0] = '\0';
str_list = string_list_new();
filebrowser_clear_type(); filebrowser_clear_type();
info->type_default = FILE_TYPE_SHADER; info->type_default = FILE_TYPE_SHADER;
@ -6703,7 +6725,10 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
#ifdef HAVE_VULKAN #ifdef HAVE_VULKAN
string_list_append(str_list, "slang", attr); string_list_append(str_list, "slang", attr);
#endif #endif
string_list_join_concat(info->exts, sizeof(info->exts), str_list, "|"); string_list_join_concat(new_exts, sizeof(new_exts), str_list, "|");
if (info->exts && !string_is_empty(info->exts))
free(info->exts);
info->exts = strdup(new_exts);
string_list_free(str_list); string_list_free(str_list);
use_filebrowser = true; use_filebrowser = true;
} }
@ -6714,7 +6739,9 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
info->type_default = FILE_TYPE_VIDEOFILTER; info->type_default = FILE_TYPE_VIDEOFILTER;
load_content = false; load_content = false;
use_filebrowser = true; use_filebrowser = true;
strlcpy(info->exts, "filt", sizeof(info->exts)); if (info->exts && !string_is_empty(info->exts))
free(info->exts);
info->exts = strdup("filt");
break; break;
case DISPLAYLIST_IMAGES: case DISPLAYLIST_IMAGES:
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list); menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
@ -6723,10 +6750,12 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
filebrowser_clear_type(); filebrowser_clear_type();
info->type_default = FILE_TYPE_IMAGE; info->type_default = FILE_TYPE_IMAGE;
{ {
char new_exts[PATH_MAX_LENGTH];
union string_list_elem_attr attr; union string_list_elem_attr attr;
struct string_list *str_list = string_list_new(); struct string_list *str_list = string_list_new();
attr.i = 0; attr.i = 0;
new_exts[0] = '\0';
#ifdef HAVE_RBMP #ifdef HAVE_RBMP
string_list_append(str_list, "bmp", attr); string_list_append(str_list, "bmp", attr);
@ -6741,7 +6770,10 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
#ifdef HAVE_RTGA #ifdef HAVE_RTGA
string_list_append(str_list, "tga", attr); string_list_append(str_list, "tga", attr);
#endif #endif
string_list_join_concat(info->exts, sizeof(info->exts), str_list, "|"); string_list_join_concat(new_exts, sizeof(new_exts), str_list, "|");
if (info->exts && !string_is_empty(info->exts))
free(info->exts);
info->exts = strdup(new_exts);
string_list_free(str_list); string_list_free(str_list);
} }
use_filebrowser = true; use_filebrowser = true;
@ -6776,7 +6808,9 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
info->type_default = FILE_TYPE_AUDIOFILTER; info->type_default = FILE_TYPE_AUDIOFILTER;
load_content = false; load_content = false;
use_filebrowser = true; use_filebrowser = true;
strlcpy(info->exts, "dsp", sizeof(info->exts)); if (info->exts && !string_is_empty(info->exts))
free(info->exts);
info->exts = strdup("dsp");
break; break;
case DISPLAYLIST_CHEAT_FILES: case DISPLAYLIST_CHEAT_FILES:
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list); menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
@ -6784,14 +6818,18 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
info->type_default = FILE_TYPE_CHEAT; info->type_default = FILE_TYPE_CHEAT;
load_content = false; load_content = false;
use_filebrowser = true; use_filebrowser = true;
strlcpy(info->exts, "cht", sizeof(info->exts)); if (info->exts && !string_is_empty(info->exts))
free(info->exts);
info->exts = strdup("cht");
break; break;
case DISPLAYLIST_CONTENT_HISTORY: case DISPLAYLIST_CONTENT_HISTORY:
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list); menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
filebrowser_clear_type(); filebrowser_clear_type();
info->type_default = FILE_TYPE_PLAIN; info->type_default = FILE_TYPE_PLAIN;
use_filebrowser = true; use_filebrowser = true;
strlcpy(info->exts, "lpl", sizeof(info->exts)); if (info->exts && !string_is_empty(info->exts))
free(info->exts);
info->exts = strdup("lpl");
break; break;
case DISPLAYLIST_FONTS: case DISPLAYLIST_FONTS:
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list); menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
@ -6799,7 +6837,9 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
info->type_default = FILE_TYPE_FONT; info->type_default = FILE_TYPE_FONT;
load_content = false; load_content = false;
use_filebrowser = true; use_filebrowser = true;
strlcpy(info->exts, "ttf", sizeof(info->exts)); if (info->exts && !string_is_empty(info->exts))
free(info->exts);
info->exts = strdup("ttf");
break; break;
case DISPLAYLIST_OVERLAYS: case DISPLAYLIST_OVERLAYS:
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list); menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
@ -6807,7 +6847,9 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
info->type_default = FILE_TYPE_OVERLAY; info->type_default = FILE_TYPE_OVERLAY;
load_content = false; load_content = false;
use_filebrowser = true; use_filebrowser = true;
strlcpy(info->exts, "cfg", sizeof(info->exts)); if (info->exts && !string_is_empty(info->exts))
free(info->exts);
info->exts = strdup("cfg");
break; break;
case DISPLAYLIST_RECORD_CONFIG_FILES: case DISPLAYLIST_RECORD_CONFIG_FILES:
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list); menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
@ -6815,7 +6857,9 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
info->type_default = FILE_TYPE_RECORD_CONFIG; info->type_default = FILE_TYPE_RECORD_CONFIG;
load_content = false; load_content = false;
use_filebrowser = true; use_filebrowser = true;
strlcpy(info->exts, "cfg", sizeof(info->exts)); if (info->exts && !string_is_empty(info->exts))
free(info->exts);
info->exts = strdup("cfg");
break; break;
case DISPLAYLIST_REMAP_FILES: case DISPLAYLIST_REMAP_FILES:
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list); menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
@ -6823,7 +6867,9 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
info->type_default = FILE_TYPE_REMAP; info->type_default = FILE_TYPE_REMAP;
load_content = false; load_content = false;
use_filebrowser = true; use_filebrowser = true;
strlcpy(info->exts, "rmp", sizeof(info->exts)); if (info->exts && !string_is_empty(info->exts))
free(info->exts);
info->exts = strdup("rmp");
break; break;
case DISPLAYLIST_DATABASE_PLAYLISTS_HORIZONTAL: case DISPLAYLIST_DATABASE_PLAYLISTS_HORIZONTAL:
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list); menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
@ -6851,7 +6897,11 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
filebrowser_clear_type(); filebrowser_clear_type();
info->type_default = FILE_TYPE_PLAIN; info->type_default = FILE_TYPE_PLAIN;
if (frontend_driver_get_core_extension(ext_name, sizeof(ext_name))) if (frontend_driver_get_core_extension(ext_name, sizeof(ext_name)))
strlcpy(info->exts, ext_name, sizeof(info->exts)); {
if (info->exts && !string_is_empty(info->exts))
free(info->exts);
info->exts = strdup(ext_name);
}
} }
if (menu_displaylist_parse_cores(menu, info) == 0) if (menu_displaylist_parse_cores(menu, info) == 0)
{ {

View File

@ -187,7 +187,7 @@ typedef struct menu_displaylist_info
char path[PATH_MAX_LENGTH]; char path[PATH_MAX_LENGTH];
char path_b[PATH_MAX_LENGTH]; char path_b[PATH_MAX_LENGTH];
char path_c[PATH_MAX_LENGTH]; char path_c[PATH_MAX_LENGTH];
char exts[PATH_MAX_LENGTH]; char *exts;
char label[255]; char label[255];
unsigned type; unsigned type;
unsigned type_default; unsigned type_default;

View File

@ -272,7 +272,7 @@ void menu_dialog_push(void)
info.path_c[0] = '\0'; info.path_c[0] = '\0';
info.label[0] = '\0'; info.label[0] = '\0';
info.label_hash = 0; info.label_hash = 0;
info.exts[0] = '\0'; info.exts = NULL;
info.type = 0; info.type = 0;
info.type_default = 0; info.type_default = 0;
info.directory_ptr = 0; info.directory_ptr = 0;