diff --git a/frontend/frontend.c b/frontend/frontend.c index d8756d171d..d58b952125 100644 --- a/frontend/frontend.c +++ b/frontend/frontend.c @@ -61,8 +61,8 @@ int main(int argc, char *argv[]) args.verbose = g_extern.verbose; args.config_path = *g_extern.config_path ? g_extern.config_path : NULL; - args.sram_path = NULL; - args.state_path = NULL; + args.sram_path = *g_extern.savefile_dir ? g_extern.savefile_dir : NULL; + args.state_path = *g_extern.savestate_dir ? g_extern.savestate_dir : NULL; args.rom_path = g_extern.fullpath; args.libretro_path = g_settings.libretro; diff --git a/general.h b/general.h index a7783b497b..711975b48c 100644 --- a/general.h +++ b/general.h @@ -342,6 +342,10 @@ struct global char savestate_name[PATH_MAX]; char xml_name[PATH_MAX]; + // Used on reentrancy to use a savestate dir. + char savefile_dir[PATH_MAX]; + char savestate_dir[PATH_MAX]; + bool block_patch; bool ups_pref; bool bps_pref; diff --git a/retroarch.c b/retroarch.c index 03ee3261ef..e9ad32b2a4 100644 --- a/retroarch.c +++ b/retroarch.c @@ -1178,6 +1178,12 @@ static void parse_input(int argc, char *argv[]) set_paths(argv[optind]); else verify_stdin_paths(); + + // Copy SRM/state dirs used, so they can be reused on reentrancy. + if (g_extern.has_set_save_path && path_is_directory(g_extern.savefile_name_srm)) + strlcpy(g_extern.savefile_dir, g_extern.savefile_name_srm, sizeof(g_extern.savefile_dir)); + if (g_extern.has_set_state_path && path_is_directory(g_extern.savestate_name)) + strlcpy(g_extern.savestate_dir, g_extern.savestate_name, sizeof(g_extern.savestate_dir)); } static void init_controllers(void) diff --git a/settings.c b/settings.c index d6ef99c5c3..5276099217 100644 --- a/settings.c +++ b/settings.c @@ -668,6 +668,7 @@ bool config_load_file(const char *path) { if (path_is_directory(tmp_str)) { + strlcpy(g_extern.savefile_dir, tmp_str, sizeof(g_extern.savefile_dir)); strlcpy(g_extern.savefile_name_srm, tmp_str, sizeof(g_extern.savefile_name_srm)); fill_pathname_dir(g_extern.savefile_name_srm, g_extern.basename, ".srm", sizeof(g_extern.savefile_name_srm)); } @@ -679,6 +680,7 @@ bool config_load_file(const char *path) { if (path_is_directory(tmp_str)) { + strlcpy(g_extern.savestate_dir, tmp_str, sizeof(g_extern.savestate_dir)); strlcpy(g_extern.savestate_name, tmp_str, sizeof(g_extern.savestate_name)); fill_pathname_dir(g_extern.savestate_name, g_extern.basename, ".state", sizeof(g_extern.savestate_name)); }