From 457ce1ddf0012ffee8f453fad444380ec0bb9df8 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 13 Jan 2016 11:16:03 +0100 Subject: [PATCH] Add param to set_fork - for restart --- command_event.c | 2 +- dynamic.c | 2 +- frontend/drivers/platform_gx.c | 20 +++++++++++++++----- frontend/drivers/platform_ps3.c | 2 +- frontend/drivers/platform_psp.c | 2 +- frontend/drivers/platform_xdk.cpp | 2 +- frontend/frontend_driver.c | 4 ++-- frontend/frontend_driver.h | 4 ++-- 8 files changed, 24 insertions(+), 14 deletions(-) diff --git a/command_event.c b/command_event.c index 7178ca9c1a..88d37ce6f7 100644 --- a/command_event.c +++ b/command_event.c @@ -1314,7 +1314,7 @@ bool event_command(enum event_command cmd) rarch_ctl(RARCH_CTL_MENU_RUNNING_FINISHED, NULL); break; case EVENT_CMD_RESTART_RETROARCH: - frontend_driver_set_fork(true, false); + frontend_driver_set_fork(true, false, true); break; case EVENT_CMD_MENU_SAVE_CURRENT_CONFIG: event_save_current_config(); diff --git a/dynamic.c b/dynamic.c index cc2b7f006d..972523f71e 100644 --- a/dynamic.c +++ b/dynamic.c @@ -1231,7 +1231,7 @@ bool rarch_environment_cb(unsigned cmd, void *data) } #if defined(RARCH_CONSOLE) - frontend_driver_set_fork(true, true); + frontend_driver_set_fork(true, true, false); #elif defined(HAVE_DYNAMIC) rarch_ctl(RARCH_CTL_LOAD_CONTENT, NULL); #endif diff --git a/frontend/drivers/platform_gx.c b/frontend/drivers/platform_gx.c index 7bce3c4438..8ddd42d79b 100644 --- a/frontend/drivers/platform_gx.c +++ b/frontend/drivers/platform_gx.c @@ -364,12 +364,15 @@ static void frontend_gx_process_args(int *argc, char *argv[]) #endif } -static void frontend_gx_set_fork(bool exitspawn, bool start_game) +static void frontend_gx_set_fork(bool exitspawn, bool start_game, bool restart) { #if defined(HW_RVL) && !defined(IS_SALAMANDER) - 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); + 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); + } #endif exit_spawn = exitspawn; @@ -413,6 +416,13 @@ static int frontend_gx_parse_drive_list(void *data) return 0; } +static void frontend_gx_shutdown(bool unused) +{ +#ifndef IS_SALAMANDER + exit(0); +#endif +} + frontend_ctx_driver_t frontend_ctx_gx = { frontend_gx_get_environment_settings, frontend_gx_init, @@ -421,7 +431,7 @@ frontend_ctx_driver_t frontend_ctx_gx = { frontend_gx_process_args, frontend_gx_exec, frontend_gx_set_fork, - NULL, /* shutdown */ + frontend_gx_shutdown, NULL, /* get_name */ NULL, /* get_os */ frontend_gx_get_rating, diff --git a/frontend/drivers/platform_ps3.c b/frontend/drivers/platform_ps3.c index ffd6eed161..1b5d979a39 100644 --- a/frontend/drivers/platform_ps3.c +++ b/frontend/drivers/platform_ps3.c @@ -326,7 +326,7 @@ static void frontend_ps3_deinit(void *data) } #ifndef IS_SALAMANDER -static void frontend_ps3_set_fork(bool exit, bool start_game) +static void frontend_ps3_set_fork(bool exit, bool start_game, bool restart) { exit_spawn = exitspawn; exitspawn_start_game = start_game; diff --git a/frontend/drivers/platform_psp.c b/frontend/drivers/platform_psp.c index 15e814e7f1..4ee80c0e20 100644 --- a/frontend/drivers/platform_psp.c +++ b/frontend/drivers/platform_psp.c @@ -273,7 +273,7 @@ static void frontend_psp_exec(const char *path, bool should_load_game) #endif } -static void frontend_psp_set_fork(bool exit, bool start_game) +static void frontend_psp_set_fork(bool exit, bool start_game, bool restart) { exit_spawn = true; exitspawn_start_game = start_game; diff --git a/frontend/drivers/platform_xdk.cpp b/frontend/drivers/platform_xdk.cpp index ad161ee077..c48631c720 100644 --- a/frontend/drivers/platform_xdk.cpp +++ b/frontend/drivers/platform_xdk.cpp @@ -1292,7 +1292,7 @@ static void frontend_xdk_exec(const char *path, bool should_load_game) #endif } -static void frontend_xdk_set_fork(bool exit, bool start_game) +static void frontend_xdk_set_fork(bool exit, bool start_game, bool restart) { exit_spawn = exit; exitspawn_start_game = start_game; diff --git a/frontend/frontend_driver.c b/frontend/frontend_driver.c index 8304dec1c8..bb1a36ceab 100644 --- a/frontend/frontend_driver.c +++ b/frontend/frontend_driver.c @@ -131,13 +131,13 @@ void frontend_driver_content_loaded(void) frontend->content_loaded(); } -void frontend_driver_set_fork(bool a, bool b) +void frontend_driver_set_fork(bool a, bool b, bool restart) { frontend_ctx_driver_t *frontend = frontend_get_ptr(); if (!frontend || !frontend->set_fork) return; - frontend->set_fork(a, b); + frontend->set_fork(a, b, restart); } void frontend_driver_process_args(int *argc, char *argv[]) diff --git a/frontend/frontend_driver.h b/frontend/frontend_driver.h index 71208793be..842b8c3146 100644 --- a/frontend/frontend_driver.h +++ b/frontend/frontend_driver.h @@ -64,7 +64,7 @@ typedef struct frontend_ctx_driver process_args_t process_args; void (*exec)(const char *, bool); - void (*set_fork)(bool exitspawn, bool start_game); + void (*set_fork)(bool exitspawn, bool start_game, bool restart); void (*shutdown)(bool); void (*get_name)(char *, size_t); void (*get_os)(char *, size_t, int *major, int *minor); @@ -116,7 +116,7 @@ int frontend_driver_parse_drive_list(void *data); void frontend_driver_content_loaded(void); -void frontend_driver_set_fork(bool a, bool b); +void frontend_driver_set_fork(bool a, bool b, bool restart); void frontend_driver_process_args(int *argc, char *argv[]);