diff --git a/frontend/info/core_info.c b/frontend/info/core_info.c index 8220efe484..245aaee655 100644 --- a/frontend/info/core_info.c +++ b/frontend/info/core_info.c @@ -27,9 +27,13 @@ static core_info_list_t* global_core_list = 0; static char core_config_path[PATH_MAX]; -static void core_info_list_resolve_all_extensions(core_info_list_t *core_info_list) +static void core_info_list_resolve_all_extensions(void *data) { size_t i, all_ext_len = 0; + core_info_list_t *core_info_list = (core_info_list_t*)data; + if (!core_info_list) + return; + for (i = 0; i < core_info_list->count; i++) { all_ext_len += core_info_list->list[i].supported_extensions ? @@ -56,10 +60,13 @@ static void core_info_list_resolve_all_extensions(core_info_list_t *core_info_li } } -static void core_info_list_resolve_all_firmware(core_info_list_t *core_info_list) +static void core_info_list_resolve_all_firmware(void *data) { size_t i; unsigned c; + core_info_list_t *core_info_list = (core_info_list_t*)data; + if (!core_info_list) + return; for (i = 0; i < core_info_list->count; i++) { @@ -176,9 +183,10 @@ error: return NULL; } -void core_info_list_free(core_info_list_t *core_info_list) +void core_info_list_free(void *data) { size_t i, j; + core_info_list_t *core_info_list = (core_info_list_t*)data; if (!core_info_list) return; @@ -212,18 +220,26 @@ void core_info_list_free(core_info_list_t *core_info_list) free(core_info_list); } -size_t core_info_list_num_info_files(core_info_list_t *core_info_list) +size_t core_info_list_num_info_files(void *data) { size_t i, num; + core_info_list_t *core_info_list = (core_info_list_t*)data; + if (!core_info_list) + return 0; + num = 0; for (i = 0; i < core_info_list->count; i++) num += !!core_info_list->list[i].data; return num; } -bool core_info_list_get_display_name(core_info_list_t *core_info_list, const char *path, char *buf, size_t size) +bool core_info_list_get_display_name(void *data, const char *path, char *buf, size_t size) { size_t i; + core_info_list_t *core_info_list = (core_info_list_t*)data; + if (!core_info_list) + return false; + for (i = 0; i < core_info_list->count; i++) { const core_info_t *info = &core_info_list->list[i]; @@ -237,11 +253,12 @@ bool core_info_list_get_display_name(core_info_list_t *core_info_list, const cha return false; } -bool core_info_list_get_info(void *data, core_info_t *out_info, const char *path) +bool core_info_list_get_info(void *data1, void *data2, const char *path) { size_t i; - core_info_list_t *core_info_list = (core_info_list_t*)data; - if (!core_info_list) + core_info_list_t *core_info_list = (core_info_list_t*)data1; + core_info_t *out_info = (core_info_t*)data2; + if (!core_info_list || !out_info) return false; memset(out_info, 0, sizeof(*out_info)); @@ -259,9 +276,11 @@ bool core_info_list_get_info(void *data, core_info_t *out_info, const char *path return false; } -bool core_info_does_support_any_file(const core_info_t *core, const struct string_list *list) +bool core_info_does_support_any_file(const void *data1, const void *data2) { size_t i; + const core_info_t *core = (const core_info_t*)data1; + const struct string_list *list = (const struct string_list*)data2; if (!list || !core || !core->supported_extensions_list) return false; @@ -271,17 +290,21 @@ bool core_info_does_support_any_file(const core_info_t *core, const struct strin return false; } -bool core_info_does_support_file(const core_info_t *core, const char *path) +bool core_info_does_support_file(const void *data, const char *path) { + const core_info_t *core = (const core_info_t*)data; if (!path || !core || !core->supported_extensions_list) return false; return string_list_find_elem_prefix(core->supported_extensions_list, ".", path_get_extension(path)); } -const char *core_info_list_get_all_extensions(core_info_list_t *core_info_list) +const char *core_info_list_get_all_extensions(void *data) { - return core_info_list->all_ext; + core_info_list_t *core_info_list = (core_info_list_t*)data; + if (core_info_list) + return core_info_list->all_ext; + return ""; } // qsort_r() is not in standard C, sadly. @@ -304,9 +327,13 @@ static int core_info_qsort_cmp(const void *a_, const void *b_) return strcasecmp(a->display_name, b->display_name); } -void core_info_list_get_supported_cores(core_info_list_t *core_info_list, const char *path, +void core_info_list_get_supported_cores(void *data, const char *path, const core_info_t **infos, size_t *num_infos) { + core_info_list_t *core_info_list = (core_info_list_t*)data; + if (!core_info_list) + return; + core_info_tmp_path = path; #ifdef HAVE_ZLIB @@ -341,9 +368,14 @@ void core_info_list_get_supported_cores(core_info_list_t *core_info_list, const *num_infos = supported; } -static core_info_t *find_core_info(core_info_list_t *list, const char *core) +static core_info_t *find_core_info(void *data, const char *core) { size_t i; + core_info_list_t *list = (core_info_list_t*)data; + + if (!list) + return NULL; + for (i = 0; i < list->count; i++) { core_info_t *info = &list->list[i]; @@ -365,11 +397,14 @@ static int core_info_firmware_cmp(const void *a_, const void *b_) return strcasecmp(a->path, b->path); } -void core_info_list_update_missing_firmware(core_info_list_t *core_info_list, +void core_info_list_update_missing_firmware(void *data, const char *core, const char *systemdir) { size_t i; char path[PATH_MAX]; + core_info_list_t *core_info_list = (core_info_list_t*)data; + if (!core_info_list) + return; core_info_t *info = find_core_info(core_info_list, core); if (!info) @@ -385,12 +420,15 @@ void core_info_list_update_missing_firmware(core_info_list_t *core_info_list, } } -void core_info_list_get_missing_firmware(core_info_list_t *core_info_list, +void core_info_list_get_missing_firmware(void *data, const char *core, const char *systemdir, const core_info_firmware_t **firmware, size_t *num_firmware) { size_t i; char path[PATH_MAX]; + core_info_list_t *core_info_list = (core_info_list_t*)data; + if (!core_info_list) + return; *firmware = NULL; *num_firmware = 0; diff --git a/frontend/info/core_info.h b/frontend/info/core_info.h index e7dc8342aa..09af306039 100644 --- a/frontend/info/core_info.h +++ b/frontend/info/core_info.h @@ -60,31 +60,31 @@ typedef struct } core_info_list_t; core_info_list_t *core_info_list_new(const char *modules_path); -void core_info_list_free(core_info_list_t *core_info_list); +void core_info_list_free(void *data); -size_t core_info_list_num_info_files(core_info_list_t *core_info_list); +size_t core_info_list_num_info_files(void *data); -bool core_info_does_support_file(const core_info_t *core, const char *path); -bool core_info_does_support_any_file(const core_info_t *core, const struct string_list *list); +bool core_info_does_support_file(const void *data, const char *path); +bool core_info_does_support_any_file(const void *data, const void *list); // Non-reentrant, does not allocate. Returns pointer to internal state. -void core_info_list_get_supported_cores(core_info_list_t *core_info_list, const char *path, +void core_info_list_get_supported_cores(void *data, const char *path, const core_info_t **infos, size_t *num_infos); // Non-reentrant, does not allocate. Returns pointer to internal state. -void core_info_list_get_missing_firmware(core_info_list_t *core_info_list, +void core_info_list_get_missing_firmware(void *data, const char *core, const char *systemdir, const core_info_firmware_t **firmware, size_t *num_firmware); -void core_info_list_update_missing_firmware(core_info_list_t *core_info_list, +void core_info_list_update_missing_firmware(void *data, const char *core, const char *systemdir); // Shallow-copies internal state. Data in *info is invalidated when the core_info_list is freed. -bool core_info_list_get_info(void *data, core_info_t *info, const char *path); +bool core_info_list_get_info(void *data1, void *data2, const char *path); -const char *core_info_list_get_all_extensions(core_info_list_t *core_info_list); +const char *core_info_list_get_all_extensions(void *data); -bool core_info_list_get_display_name(core_info_list_t *core_info_list, const char *path, char *buf, size_t size); +bool core_info_list_get_display_name(void *data, const char *path, char *buf, size_t size); void core_info_set_core_path(const char* core_path); void core_info_set_config_path(const char* config_path); diff --git a/frontend/menu/menu_common.c b/frontend/menu/menu_common.c index 65d90a7f5e..d07e371eba 100644 --- a/frontend/menu/menu_common.c +++ b/frontend/menu/menu_common.c @@ -903,13 +903,14 @@ static inline bool menu_list_elem_is_dir(file_list_t *buf, unsigned offset) return type != RGUI_FILE_PLAIN; } -void menu_build_scroll_indices(file_list_t *buf) +void menu_build_scroll_indices(void *data) { size_t i; int current; bool current_is_dir; + file_list_t *buf = (file_list_t*)data; - if (!driver.menu) + if (!driver.menu || !buf) return; driver.menu->scroll_indices_size = 0; diff --git a/frontend/menu/menu_common.h b/frontend/menu/menu_common.h index 1e3d5a33e8..c7313508ab 100644 --- a/frontend/menu/menu_common.h +++ b/frontend/menu/menu_common.h @@ -121,7 +121,7 @@ uint64_t menu_input(void); void menu_flush_stack_type(unsigned final_type); void menu_update_system_info(void *data, bool *load_no_rom); -void menu_build_scroll_indices(file_list_t *buf); +void menu_build_scroll_indices(void *data); #ifdef __cplusplus }