mirror of
https://github.com/libretro/RetroArch
synced 2025-04-10 06:44:27 +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 "../file_ext.h"
|
||||||
#include "../input/input_common.h"
|
#include "../input/input_common.h"
|
||||||
#include "../dir_list_special.h"
|
#include "../dir_list_special.h"
|
||||||
|
#include "../string_list_special.h"
|
||||||
|
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
#include "../frontend/drivers/platform_linux.h"
|
#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;
|
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;
|
const core_info_t *core_info = NULL;
|
||||||
core_info_list_get_supported_cores(global->core_info.list,
|
struct string_list *cores_names = string_list_new_special(STRING_LIST_SUPPORTED_CORES_NAMES,
|
||||||
menu->deferred_path, &core_info, &list_size);
|
(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_entries_push(info->list,
|
||||||
menu_hash_to_str(MENU_LABEL_VALUE_NO_CORES_AVAILABLE),
|
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
|
else
|
||||||
{
|
{
|
||||||
for (i = 0; i < list_size; i++)
|
for (i = 0; i < cores_names_size; i++)
|
||||||
{
|
{
|
||||||
if (type == DISPLAYLIST_CORES_COLLECTION_SUPPORTED)
|
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);
|
MENU_FILE_CORE, 0, 0);
|
||||||
else
|
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_hash_to_str(MENU_LABEL_DETECT_CORE_LIST_OK),
|
||||||
MENU_FILE_CORE, 0, 0);
|
MENU_FILE_CORE, 0, 0);
|
||||||
menu_entries_set_alt_at_offset(info->list, i,
|
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;
|
break;
|
||||||
|
@ -39,11 +39,10 @@
|
|||||||
#include "record/record_driver.h"
|
#include "record/record_driver.h"
|
||||||
|
|
||||||
struct string_list *string_list_new_special(enum string_list_type 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)
|
||||||
{
|
{
|
||||||
union string_list_elem_attr attr;
|
union string_list_elem_attr attr;
|
||||||
unsigned i;
|
unsigned i;
|
||||||
size_t list_size;
|
|
||||||
const core_info_t *core_info = NULL;
|
const core_info_t *core_info = NULL;
|
||||||
global_t *global = global_get_ptr();
|
global_t *global = global_get_ptr();
|
||||||
struct string_list *s = string_list_new();
|
struct string_list *s = string_list_new();
|
||||||
@ -159,12 +158,12 @@ struct string_list *string_list_new_special(enum string_list_type type,
|
|||||||
break;
|
break;
|
||||||
case STRING_LIST_SUPPORTED_CORES_PATHS:
|
case STRING_LIST_SUPPORTED_CORES_PATHS:
|
||||||
core_info_list_get_supported_cores(global->core_info.list,
|
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;
|
goto error;
|
||||||
|
|
||||||
for (i = 0; i < list_size; i++)
|
for (i = 0; i < *list_size; i++)
|
||||||
{
|
{
|
||||||
const char *opt = NULL;
|
const char *opt = NULL;
|
||||||
const core_info_t *info = (const core_info_t*)&core_info[i];
|
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;
|
break;
|
||||||
case STRING_LIST_SUPPORTED_CORES_NAMES:
|
case STRING_LIST_SUPPORTED_CORES_NAMES:
|
||||||
core_info_list_get_supported_cores(global->core_info.list,
|
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;
|
goto error;
|
||||||
|
|
||||||
for (i = 0; i < list_size; i++)
|
for (i = 0; i < *list_size; i++)
|
||||||
{
|
{
|
||||||
const char *opt = NULL;
|
const char *opt = NULL;
|
||||||
const core_info_t *info = (const core_info_t*)&core_info[i];
|
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)
|
const char *char_list_new_special(enum string_list_type type, void *data)
|
||||||
{
|
{
|
||||||
unsigned len;
|
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;
|
char *options = (len > 0) ? (char*)calloc(len, sizeof(char)): NULL;
|
||||||
|
|
||||||
if (options && s)
|
if (options && s)
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
#ifndef _STRING_LIST_SPECIAL_H
|
#ifndef _STRING_LIST_SPECIAL_H
|
||||||
#define _STRING_LIST_SPECIAL_H
|
#define _STRING_LIST_SPECIAL_H
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
#include <string/string_list.h>
|
#include <string/string_list.h>
|
||||||
|
|
||||||
enum string_list_type
|
enum string_list_type
|
||||||
@ -38,7 +40,7 @@ enum string_list_type
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct string_list *string_list_new_special(enum string_list_type 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);
|
const char *char_list_new_special(enum string_list_type type, void *data);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user