static void frontend_gx_exitspawn(char *s, size_t len) { bool should_load_game = false; #if defined(IS_SALAMANDER) if (!string_is_empty(gx_rom_path)) should_load_game = true; #elif defined(HW_RVL) char salamander_basename[PATH_MAX_LENGTH]; if (gx_fork_mode == FRONTEND_FORK_NONE) return; switch (gx_fork_mode) { case FRONTEND_FORK_CORE_WITH_ARGS: should_load_game = true; break; case FRONTEND_FORK_CORE: /* fall-through */ case FRONTEND_FORK_RESTART: { char new_path[PATH_MAX_LENGTH]; char salamander_name[PATH_MAX_LENGTH]; if (frontend_driver_get_salamander_basename(salamander_name, sizeof(salamander_name))) { fill_pathname_join(new_path, g_defaults.dirs[DEFAULT_DIR_CORE], salamander_name, sizeof(new_path)); path_set(RARCH_PATH_CONTENT, new_path); } } break; case FRONTEND_FORK_NONE: default: break; } frontend_gx_exec(s, should_load_game); frontend_driver_get_salamander_basename(salamander_basename, sizeof(salamander_basename)); /* FIXME/TODO - hack * direct loading failed (out of memory), * try to jump to Salamander, * then load the correct core */ fill_pathname_join(s, g_defaults.dirs[DEFAULT_DIR_CORE], salamander_basename, len); #endif frontend_gx_exec(s, should_load_game); }
/*We need to set libretro to the first entry in the cores * directory so that it will be saved to the config file */ static void find_first_libretro_core(char *first_file, size_t size_of_first_file, const char *dir, const char * ext) { size_t i; bool ret = false; struct string_list *list = dir_list_new(dir, ext, false, true, false, false); if (!list) { RARCH_ERR("Couldn't read directory." " Cannot infer default libretro core.\n"); return; } RARCH_LOG("Searching for valid libretro implementation in: \"%s\".\n", dir); 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); if (!libretro_elem) continue; fill_pathname_base(fname, libretro_elem, sizeof(fname)); if (!frontend_driver_get_salamander_basename( salamander_name, sizeof(salamander_name))) break; if (!strncmp(fname, salamander_name, sizeof(fname))) { 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); } continue; } strlcpy(first_file, fname, size_of_first_file); RARCH_LOG("First found libretro core is: \"%s\".\n", first_file); ret = true; } dir_list_free(list); }