diff --git a/file_ext.h b/file_ext.h index 56a4bda332..642314da4a 100644 --- a/file_ext.h +++ b/file_ext.h @@ -28,22 +28,16 @@ #else #if defined(__CELLOS_LV2__) #define EXT_EXECUTABLES "self|bin" -#define SALAMANDER_FILE "EBOOT.BIN" #elif defined(PSP) #define EXT_EXECUTABLES "pbp" -#define SALAMANDER_FILE "EBOOT.PBP" #elif defined(VITA) #define EXT_EXECUTABLES "velf" -#define SALAMANDER_FILE "default.velf" #elif defined(_XBOX1) #define EXT_EXECUTABLES "xbe" -#define SALAMANDER_FILE "default.xbe" #elif defined(_XBOX360) #define EXT_EXECUTABLES "xex" -#define SALAMANDER_FILE "default.xex" #elif defined(GEKKO) #define EXT_EXECUTABLES "dol" -#define SALAMANDER_FILE "boot.dol" #else #define EXT_EXECUTABLES "" #endif diff --git a/frontend/drivers/platform_gx.c b/frontend/drivers/platform_gx.c index c9b71f1e6c..74a8279618 100644 --- a/frontend/drivers/platform_gx.c +++ b/frontend/drivers/platform_gx.c @@ -372,8 +372,16 @@ static void frontend_gx_set_fork(bool exitspawn, bool start_game, bool restart) if (restart) { char new_path[PATH_MAX_LENGTH]; - fill_pathname_join(new_path, g_defaults.dir.core, SALAMANDER_FILE, sizeof(new_path)); - runloop_ctl(RUNLOOP_CTL_SET_CONTENT_PATH, new_path); + char salamander_name[PATH_MAX_LENGTH]; + + if (frontend_driver_get_salamander_basename(salamander_name, + sizeof(salamander_name))) + { + fill_pathname_join(new_path, g_defaults.dir.core, + salamander_name, sizeof(new_path)); + runloop_ctl(RUNLOOP_CTL_SET_CONTENT_PATH, new_path); + } + } #endif diff --git a/frontend/frontend_driver.c b/frontend/frontend_driver.c index 55c17bfc63..ebf26faa6a 100644 --- a/frontend/frontend_driver.c +++ b/frontend/frontend_driver.c @@ -107,6 +107,37 @@ frontend_ctx_driver_t *frontend_ctx_init_first(void) return frontend; } +bool frontend_driver_get_salamander_basename(char *s, size_t len) +{ +#ifdef HAVE_DYNAMIC + return false; +#else + +#if defined(__CELLOS_LV2__) + strlcpy(s, "EBOOT.BIN", len); + return true; +#elif defined(PSP) + strlcpy(s, "EBOOT.PBP", len); + return true; +#elif defined(VITA) + strlcpy(s, "default.velf", len); + return true; +#elif defined(_XBOX1) + strlcpy(s, "default.xbe", len); + return true; +#elif defined(_XBOX360) + strlcpy(s, "default.xex", len); + return true; +#elif defined(HW_RVL) + strlcpy(s, "boot.dol", len); + return true; +#else + return false; +#endif + +#endif +} + #ifndef IS_SALAMANDER frontend_ctx_driver_t *frontend_get_ptr(void) { diff --git a/frontend/frontend_driver.h b/frontend/frontend_driver.h index 326813520d..ab9b0e0011 100644 --- a/frontend/frontend_driver.h +++ b/frontend/frontend_driver.h @@ -140,6 +140,8 @@ void frontend_driver_exitspawn(char *s, size_t len); bool frontend_driver_has_fork(void); +bool frontend_driver_get_salamander_basename(char *s, size_t len); + #ifdef __cplusplus } #endif diff --git a/frontend/frontend_salamander.c b/frontend/frontend_salamander.c index 4461f9fea4..e53bf697d3 100644 --- a/frontend/frontend_salamander.c +++ b/frontend/frontend_salamander.c @@ -56,6 +56,7 @@ static void find_first_libretro_core(char *first_file, for (i = 0; i < list->size && !ret; i++) { char fname[PATH_MAX_LENGTH]; + char salamander_name[PATH_MAX_LENGTH]; const char *libretro_elem = (const char*)list->elems[i].data; RARCH_LOG("Checking library: \"%s\".\n", libretro_elem); @@ -65,9 +66,12 @@ static void find_first_libretro_core(char *first_file, fill_pathname_base(fname, libretro_elem, sizeof(fname)); - if (strncmp(fname, SALAMANDER_FILE, sizeof(fname)) == 0) + if (!frontend_driver_get_salamander_basename(salamander_name, sizeof(salamander_name))) + break; + + if (!strncmp(fname, salamander_name, sizeof(fname))) { - if ((i + 1) == list->size) + if (list->size == (i + 1)) { RARCH_WARN("Entry is RetroArch Salamander itself, but is last entry. No choice but to set it.\n"); strlcpy(first_file, fname, size_of_first_file); diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 3541dd14d4..5d8a5d75e9 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -2262,7 +2262,15 @@ static int menu_displaylist_parse_generic(menu_displaylist_info_t *info, bool ho #ifndef HAVE_DYNAMIC if (frontend_driver_has_fork()) { - if (is_dir || string_is_equal_noncase(path, SALAMANDER_FILE)) + char salamander_name[PATH_MAX_LENGTH]; + + if (frontend_driver_get_salamander_basename(salamander_name, sizeof(salamander_name))) + { + if (string_is_equal_noncase(path, salamander_name)) + continue; + } + + if (is_dir) continue; } #endif