mirror of
https://github.com/libretro/RetroArch.git
synced 2025-04-02 10:51:52 -04:00
fall gracefully back to the menu if a dynamic core could not be loaded
This commit is contained in:
parent
2f74324ac9
commit
e49c31fe78
3 changed files with 24 additions and 11 deletions
|
@ -235,7 +235,8 @@ bool core_init_symbols(enum rarch_core_type *type)
|
||||||
{
|
{
|
||||||
if (!type)
|
if (!type)
|
||||||
return false;
|
return false;
|
||||||
init_libretro_sym(*type, &core);
|
if (!init_libretro_sym(*type, &core))
|
||||||
|
return false;
|
||||||
core_symbols_inited = true;
|
core_symbols_inited = true;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
27
dynamic.c
27
dynamic.c
|
@ -206,7 +206,7 @@ void libretro_get_environment_info(void (*func)(retro_environment_t),
|
||||||
ignore_environment_cb = false;
|
ignore_environment_cb = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void load_dynamic_core(void)
|
static bool load_dynamic_core(void)
|
||||||
{
|
{
|
||||||
function_t sym = dylib_proc(NULL, "retro_init");
|
function_t sym = dylib_proc(NULL, "retro_init");
|
||||||
|
|
||||||
|
@ -244,8 +244,11 @@ static void load_dynamic_core(void)
|
||||||
RARCH_ERR("Failed to open libretro core: \"%s\"\n",
|
RARCH_ERR("Failed to open libretro core: \"%s\"\n",
|
||||||
path_get(RARCH_PATH_CORE));
|
path_get(RARCH_PATH_CORE));
|
||||||
RARCH_ERR("Error(s): %s\n", dylib_error());
|
RARCH_ERR("Error(s): %s\n", dylib_error());
|
||||||
retroarch_fail(1, "load_dynamic()");
|
runloop_msg_queue_push(msg_hash_to_str(MSG_FAILED_TO_OPEN_LIBRETRO_CORE), 1, 180, true);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static dylib_t libretro_get_system_info_lib(const char *path,
|
static dylib_t libretro_get_system_info_lib(const char *path,
|
||||||
|
@ -366,15 +369,17 @@ bool libretro_get_system_info(const char *path,
|
||||||
* If CORE_TYPE_DUMMY, will
|
* If CORE_TYPE_DUMMY, will
|
||||||
* load dummy symbols.
|
* load dummy symbols.
|
||||||
*
|
*
|
||||||
* Setup libretro callback symbols.
|
* Setup libretro callback symbols. Returns true on success,
|
||||||
|
* or false if symbols could not be loaded.
|
||||||
**/
|
**/
|
||||||
static void load_symbols(enum rarch_core_type type, struct retro_core_t *current_core)
|
static bool load_symbols(enum rarch_core_type type, struct retro_core_t *current_core)
|
||||||
{
|
{
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case CORE_TYPE_PLAIN:
|
case CORE_TYPE_PLAIN:
|
||||||
#ifdef HAVE_DYNAMIC
|
#ifdef HAVE_DYNAMIC
|
||||||
load_dynamic_core();
|
if (!load_dynamic_core())
|
||||||
|
return false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
SYMBOL(retro_init);
|
SYMBOL(retro_init);
|
||||||
|
@ -595,6 +600,8 @@ static void load_symbols(enum rarch_core_type type, struct retro_core_t *current
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -644,15 +651,19 @@ void libretro_get_current_core_pathname(char *name, size_t size)
|
||||||
* load dummy symbols.
|
* load dummy symbols.
|
||||||
*
|
*
|
||||||
* Initializes libretro symbols and
|
* Initializes libretro symbols and
|
||||||
* setups environment callback functions.
|
* setups environment callback functions. Returns true on success,
|
||||||
|
* or false if symbols could not be loaded.
|
||||||
**/
|
**/
|
||||||
void init_libretro_sym(enum rarch_core_type type, struct retro_core_t *current_core)
|
bool init_libretro_sym(enum rarch_core_type type, struct retro_core_t *current_core)
|
||||||
{
|
{
|
||||||
/* Guarantee that we can do "dirty" casting.
|
/* Guarantee that we can do "dirty" casting.
|
||||||
* Every OS that this program supports should pass this. */
|
* Every OS that this program supports should pass this. */
|
||||||
retro_assert(sizeof(void*) == sizeof(void (*)(void)));
|
retro_assert(sizeof(void*) == sizeof(void (*)(void)));
|
||||||
|
|
||||||
load_symbols(type, current_core);
|
if (!load_symbols(type, current_core))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -145,9 +145,10 @@ struct retro_core_t
|
||||||
* load dummy symbols.
|
* load dummy symbols.
|
||||||
*
|
*
|
||||||
* Initializes libretro symbols and
|
* Initializes libretro symbols and
|
||||||
* setups environment callback functions.
|
* setups environment callback functions. Returns true on success,
|
||||||
|
* or false if symbols could not be loaded.
|
||||||
**/
|
**/
|
||||||
void init_libretro_sym(enum rarch_core_type type,
|
bool init_libretro_sym(enum rarch_core_type type,
|
||||||
struct retro_core_t *core);
|
struct retro_core_t *core);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Add table
Reference in a new issue