mirror of
https://github.com/libretro/RetroArch.git
synced 2025-01-19 07:16:21 +00:00
Refactor menu_displaylist.c's iteration of cores - use string_list_new_special
This commit is contained in:
parent
a0531cd7cf
commit
30296ff81e
@ -35,6 +35,7 @@
|
||||
#include "../file_ext.h"
|
||||
#include "../input/input_common.h"
|
||||
#include "../dir_list_special.h"
|
||||
#include "../string_list_special.h"
|
||||
|
||||
#ifdef __linux__
|
||||
#include "../frontend/drivers/platform_linux.h"
|
||||
@ -2848,11 +2849,17 @@ int menu_displaylist_push_list(menu_displaylist_info_t *info, unsigned type)
|
||||
info->need_push = true;
|
||||
|
||||
{
|
||||
unsigned cores_names_len;
|
||||
size_t cores_names_size;
|
||||
unsigned cores_paths_len;
|
||||
size_t cores_paths_size;
|
||||
const core_info_t *core_info = NULL;
|
||||
core_info_list_get_supported_cores(global->core_info.list,
|
||||
menu->deferred_path, &core_info, &list_size);
|
||||
struct string_list *cores_names = string_list_new_special(STRING_LIST_SUPPORTED_CORES_NAMES,
|
||||
(void*)menu->deferred_path, &cores_names_len, &cores_names_size);
|
||||
struct string_list *cores_paths = string_list_new_special(STRING_LIST_SUPPORTED_CORES_PATHS,
|
||||
(void*)menu->deferred_path, &cores_paths_len, &cores_paths_size);
|
||||
|
||||
if (list_size == 0)
|
||||
if (cores_names_size == 0)
|
||||
{
|
||||
menu_entries_push(info->list,
|
||||
menu_hash_to_str(MENU_LABEL_VALUE_NO_CORES_AVAILABLE),
|
||||
@ -2861,18 +2868,21 @@ int menu_displaylist_push_list(menu_displaylist_info_t *info, unsigned type)
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = 0; i < list_size; i++)
|
||||
for (i = 0; i < cores_names_size; i++)
|
||||
{
|
||||
if (type == DISPLAYLIST_CORES_COLLECTION_SUPPORTED)
|
||||
menu_entries_push(info->list, core_info[i].path, "",
|
||||
menu_entries_push(info->list, cores_paths->elems[i].data, "",
|
||||
MENU_FILE_CORE, 0, 0);
|
||||
else
|
||||
menu_entries_push(info->list, core_info[i].path,
|
||||
menu_entries_push(info->list, cores_paths->elems[i].data,
|
||||
menu_hash_to_str(MENU_LABEL_DETECT_CORE_LIST_OK),
|
||||
MENU_FILE_CORE, 0, 0);
|
||||
menu_entries_set_alt_at_offset(info->list, i,
|
||||
core_info[i].display_name);
|
||||
cores_names->elems[i].data);
|
||||
}
|
||||
|
||||
string_list_free(cores_names);
|
||||
string_list_free(cores_paths);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -39,11 +39,10 @@
|
||||
#include "record/record_driver.h"
|
||||
|
||||
struct string_list *string_list_new_special(enum string_list_type type,
|
||||
void *data, unsigned *len)
|
||||
void *data, unsigned *len, size_t *list_size)
|
||||
{
|
||||
union string_list_elem_attr attr;
|
||||
unsigned i;
|
||||
size_t list_size;
|
||||
const core_info_t *core_info = NULL;
|
||||
global_t *global = global_get_ptr();
|
||||
struct string_list *s = string_list_new();
|
||||
@ -159,12 +158,12 @@ struct string_list *string_list_new_special(enum string_list_type type,
|
||||
break;
|
||||
case STRING_LIST_SUPPORTED_CORES_PATHS:
|
||||
core_info_list_get_supported_cores(global->core_info.list,
|
||||
(const char*)data, &core_info, &list_size);
|
||||
(const char*)data, &core_info, list_size);
|
||||
|
||||
if (list_size == 0)
|
||||
if (*list_size == 0)
|
||||
goto error;
|
||||
|
||||
for (i = 0; i < list_size; i++)
|
||||
for (i = 0; i < *list_size; i++)
|
||||
{
|
||||
const char *opt = NULL;
|
||||
const core_info_t *info = (const core_info_t*)&core_info[i];
|
||||
@ -193,12 +192,12 @@ struct string_list *string_list_new_special(enum string_list_type type,
|
||||
break;
|
||||
case STRING_LIST_SUPPORTED_CORES_NAMES:
|
||||
core_info_list_get_supported_cores(global->core_info.list,
|
||||
(const char*)data, &core_info, &list_size);
|
||||
(const char*)data, &core_info, list_size);
|
||||
|
||||
if (list_size == 0)
|
||||
if (*list_size == 0)
|
||||
goto error;
|
||||
|
||||
for (i = 0; i < list_size; i++)
|
||||
for (i = 0; i < *list_size; i++)
|
||||
{
|
||||
const char *opt = NULL;
|
||||
const core_info_t *info = (const core_info_t*)&core_info[i];
|
||||
@ -243,7 +242,8 @@ error:
|
||||
const char *char_list_new_special(enum string_list_type type, void *data)
|
||||
{
|
||||
unsigned len;
|
||||
struct string_list *s = string_list_new_special(type, data, &len);
|
||||
size_t list_size;
|
||||
struct string_list *s = string_list_new_special(type, data, &len, &list_size);
|
||||
char *options = (len > 0) ? (char*)calloc(len, sizeof(char)): NULL;
|
||||
|
||||
if (options && s)
|
||||
|
@ -16,6 +16,8 @@
|
||||
#ifndef _STRING_LIST_SPECIAL_H
|
||||
#define _STRING_LIST_SPECIAL_H
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#include <string/string_list.h>
|
||||
|
||||
enum string_list_type
|
||||
@ -38,7 +40,7 @@ enum string_list_type
|
||||
};
|
||||
|
||||
struct string_list *string_list_new_special(enum string_list_type type,
|
||||
void *data, unsigned *len);
|
||||
void *data, unsigned *len, size_t *list_size);
|
||||
|
||||
const char *char_list_new_special(enum string_list_type type, void *data);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user