(Lakka) Use strlcpy/strlcat

(Menu) Abstract menu_init_core_info - we can have different
implementations of this per menu drivers
This commit is contained in:
twinaphex 2014-05-09 21:00:50 +02:00
parent 67189e84f0
commit f656336b7f
8 changed files with 69 additions and 37 deletions

View File

@ -431,6 +431,7 @@ typedef struct menu_ctx_driver
void (*list_delete)(void *, size_t);
void (*list_clear)(void *);
void (*list_set_selection)(void *);
void (*init_core_info)(void *);
const menu_ctx_driver_backend_t *backend;
// Human readable string.

View File

@ -1470,7 +1470,9 @@ static int menu_common_iterate(void *data, unsigned action)
else if (menu_type == RGUI_LIBRETRO_DIR_PATH)
{
strlcpy(g_settings.libretro_directory, dir, sizeof(g_settings.libretro_directory));
menu_init_core_info(rgui);
if (driver.menu_ctx && driver.menu_ctx->init_core_info)
driver.menu_ctx->init_core_info(rgui);
menu_flush_stack_type(rgui, RGUI_SETTINGS_PATH_OPTIONS);
}
#ifdef HAVE_DYNAMIC
@ -1483,7 +1485,8 @@ static int menu_common_iterate(void *data, unsigned action)
else if (menu_type == RGUI_LIBRETRO_INFO_DIR_PATH)
{
strlcpy(g_settings.libretro_info_path, dir, sizeof(g_settings.libretro_info_path));
menu_init_core_info(rgui);
if (driver.menu_ctx && driver.menu_ctx->init_core_info)
driver.menu_ctx->init_core_info(rgui);
menu_flush_stack_type(rgui, RGUI_SETTINGS_PATH_OPTIONS);
}
else if (menu_type == RGUI_SHADER_DIR_PATH)
@ -2979,14 +2982,16 @@ static int menu_common_setting_set(void *data, unsigned setting, unsigned action
if (action == RGUI_ACTION_START)
{
*g_settings.libretro_directory = '\0';
menu_init_core_info(rgui);
if (driver.menu_ctx && driver.menu_ctx->init_core_info)
driver.menu_ctx->init_core_info(rgui);
}
break;
case RGUI_LIBRETRO_INFO_DIR_PATH:
if (action == RGUI_ACTION_START)
{
*g_settings.libretro_info_path = '\0';
menu_init_core_info(rgui);
if (driver.menu_ctx && driver.menu_ctx->init_core_info)
driver.menu_ctx->init_core_info(rgui);
}
break;
case RGUI_CONFIG_DIR_PATH:

View File

@ -904,12 +904,7 @@ static void *lakka_init(void)
init_font(gl, g_settings.video.font_path, 6, 1440, 900);
menu_init_core_info(rgui);
rgui->core_info = core_info_list_new(*g_settings.libretro_directory ? g_settings.libretro_directory : "/usr/lib/libretro");
num_categories = rgui->core_info ? rgui->core_info->count + 1 : 1;
lakka_init_core_info(rgui);
lakka_init_assets(rgui);
categories = realloc(categories, num_categories * sizeof(menu_category));
@ -923,22 +918,22 @@ static void *lakka_init(void)
struct font_output_list out;
core_info_t corenfo = rgui->core_info->list[i];
strcpy(core_id, basename(corenfo.path));
strcpy(core_id, str_replace(core_id, ".so", ""));
strcpy(core_id, str_replace(core_id, ".dll", ""));
strcpy(core_id, str_replace(core_id, ".dylib", ""));
strcpy(core_id, str_replace(core_id, "-libretro", ""));
strcpy(core_id, str_replace(core_id, "_libretro", ""));
strcpy(core_id, str_replace(core_id, "libretro-", ""));
strcpy(core_id, str_replace(core_id, "libretro_", ""));
strlcpy(core_id, basename(corenfo.path), sizeof(core_id));
strlcpy(core_id, str_replace(core_id, ".so", ""), sizeof(core_id));
strlcpy(core_id, str_replace(core_id, ".dll", ""), sizeof(core_id));
strlcpy(core_id, str_replace(core_id, ".dylib", ""), sizeof(core_id));
strlcpy(core_id, str_replace(core_id, "-libretro", ""), sizeof(core_id));
strlcpy(core_id, str_replace(core_id, "_libretro", ""), sizeof(core_id));
strlcpy(core_id, str_replace(core_id, "libretro-", ""), sizeof(core_id));
strlcpy(core_id, str_replace(core_id, "libretro_", ""), sizeof(core_id));
strcpy(texturepath, "/usr/share/retroarch/");
strcat(texturepath, core_id);
strcat(texturepath, ".png");
strlcpy(texturepath, "/usr/share/retroarch/", sizeof(texturepath));
strlcat(texturepath, core_id, sizeof(texturepath));
strlcat(texturepath, ".png", sizeof(texturepath));
strcpy(gametexturepath, "/usr/share/retroarch/");
strcat(gametexturepath, core_id);
strcat(gametexturepath, "-game.png");
strlcpy(gametexturepath, sizeof(gametexturepath), "/usr/share/retroarch/");
strlcat(gametexturepath, core_id, sizeof(gametexturepath));
strlcat(gametexturepath, "-game.png", sizeof(gametexturepath));
mcat.name = corenfo.display_name;
mcat.libretro = corenfo.path;
@ -990,6 +985,17 @@ static int lakka_input_postprocess(void *data, uint64_t old_state)
return ret;
}
static void lakka_init_core_info(void *data)
{
rgui_handle_t *rgui = (rgui_handle_t*)data;
core_info_list_free(rgui->core_info);
rgui->core_info = NULL;
rgui->core_info = core_info_list_new(*g_settings.libretro_directory ? g_settings.libretro_directory : "/usr/lib/libretro");
num_categories = rgui->core_info ? rgui->core_info->count + 1 : 1;
}
const menu_ctx_driver_t menu_ctx_lakka = {
lakka_set_texture,
@ -1014,6 +1020,7 @@ const menu_ctx_driver_t menu_ctx_lakka = {
NULL,
NULL,
NULL,
lakka_init_core_info,
&menu_ctx_backend_lakka,
"lakka",
};

View File

@ -621,6 +621,16 @@ void rgui_set_texture(void *data, bool enable)
enable, rgui->width, rgui->height, 1.0f);
}
static void rgui_init_core_info(void *data)
{
rgui_handle_t *rgui = (rgui_handle_t*)data;
core_info_list_free(rgui->core_info);
rgui->core_info = NULL;
if (*g_settings.libretro_directory)
rgui->core_info = core_info_list_new(g_settings.libretro_directory);
}
const menu_ctx_driver_t menu_ctx_rgui = {
rgui_set_texture,
rgui_render_messagebox,
@ -644,6 +654,7 @@ const menu_ctx_driver_t menu_ctx_rgui = {
NULL,
NULL,
NULL,
rgui_init_core_info,
&menu_ctx_backend_common,
"rgui",
};

View File

@ -480,6 +480,15 @@ static int rmenu_input_postprocess(void *data, uint64_t old_state)
return ret;
}
static void rmenu_init_core_info(void *data)
{
rgui_handle_t *rgui = (rgui_handle_t*)data;
core_info_list_free(rgui->core_info);
rgui->core_info = NULL;
if (*g_settings.libretro_directory)
rgui->core_info = core_info_list_new(g_settings.libretro_directory);
}
const menu_ctx_driver_t menu_ctx_rmenu = {
rmenu_set_texture,
@ -504,6 +513,7 @@ const menu_ctx_driver_t menu_ctx_rmenu = {
NULL,
NULL,
NULL,
rmenu_init_core_info,
&menu_ctx_backend_common,
"rmenu",
};

View File

@ -709,6 +709,16 @@ static void rmenu_xui_list_set_selection(void *data)
XuiListSetCurSel(m_menulist, list->list[list->size].directory_ptr);
}
static void rmenu_xui_init_core_info(void *data)
{
rgui_handle_t *rgui = (rgui_handle_t*)data;
core_info_list_free(rgui->core_info);
rgui->core_info = NULL;
if (*g_settings.libretro_directory)
rgui->core_info = core_info_list_new(g_settings.libretro_directory);
}
const menu_ctx_driver_t menu_ctx_rmenu_xui = {
NULL,
rmenu_xui_render_messagebox,
@ -732,6 +742,7 @@ const menu_ctx_driver_t menu_ctx_rmenu_xui = {
rmenu_xui_list_delete,
rmenu_xui_list_clear,
rmenu_xui_list_set_selection,
rmenu_xui_init_core_info,
&menu_ctx_backend_common,
"rmenu_xui",
};

View File

@ -895,14 +895,3 @@ void menu_build_scroll_indices(void *data, file_list_t *buf)
rgui->scroll_indices[rgui->scroll_indices_size++] = buf->size - 1;
}
void menu_init_core_info(void *data)
{
rgui_handle_t *rgui = (rgui_handle_t*)data;
core_info_list_free(rgui->core_info);
rgui->core_info = NULL;
if (*g_settings.libretro_directory)
rgui->core_info = core_info_list_new(g_settings.libretro_directory);
}

View File

@ -191,8 +191,6 @@ void menu_free(void *data);
void menu_ticker_line(char *buf, size_t len, unsigned tick, const char *str, bool selected);
void menu_init_core_info(void *data);
void load_menu_game_prepare(void *data);
void load_menu_game_prepare_dummy(void *data);
bool load_menu_game(void *data);