diff --git a/command.c b/command.c index cc4094c601..1ef6af3d2e 100644 --- a/command.c +++ b/command.c @@ -1206,9 +1206,9 @@ static void command_event_load_auto_state(void) char msg[128] = {0}; char savestate_name_auto[PATH_MAX_LENGTH] = {0}; settings_t *settings = config_get_ptr(); +#ifdef HAVE_NETWORKING global_t *global = global_get_ptr(); -#ifdef HAVE_NETWORKING if (global->netplay.enable && !global->netplay.is_spectate) return; #endif @@ -1221,7 +1221,7 @@ static void command_event_load_auto_state(void) if (!settings->savestate_auto_load) return; - fill_pathname_noext(savestate_name_auto, global->name.savestate, + fill_pathname_noext(savestate_name_auto, path_get(RARCH_PATH_SAVESTATE), file_path_str(FILE_PATH_AUTO_EXTENSION), sizeof(savestate_name_auto)); @@ -1246,21 +1246,20 @@ static void command_event_set_savestate_auto_index(void) struct string_list *dir_list = NULL; unsigned max_idx = 0; settings_t *settings = config_get_ptr(); - global_t *global = global_get_ptr(); if (!settings->savestate_auto_index) return; - /* Find the file in the same directory as global->savestate_name + /* Find the file in the same directory as path_get(RARCH_PATH_SAVESTATE) * with the largest numeral suffix. * * E.g. /foo/path/content.state, will try to find * /foo/path/content.state%d, where %d is the largest number available. */ - fill_pathname_basedir(state_dir, global->name.savestate, + fill_pathname_basedir(state_dir, path_get(RARCH_PATH_SAVESTATE), sizeof(state_dir)); - fill_pathname_base(state_base, global->name.savestate, + fill_pathname_base(state_base, path_get(RARCH_PATH_SAVESTATE), sizeof(state_base)); if (!(dir_list = dir_list_new_special(state_dir, DIR_LIST_PLAIN, NULL))) @@ -1416,12 +1415,9 @@ static bool command_event_save_auto_state(void) bool ret; char savestate_name_auto[PATH_MAX_LENGTH] = {0}; settings_t *settings = config_get_ptr(); - global_t *global = global_get_ptr(); if (!settings || !settings->savestate_auto_save) return false; - if (!global) - return false; if (rarch_ctl(RARCH_CTL_IS_DUMMY_CORE, NULL)) return false; if (content_does_not_need_content()) @@ -1432,7 +1428,7 @@ static bool command_event_save_auto_state(void) return false; #endif - fill_pathname_noext(savestate_name_auto, global->name.savestate, + fill_pathname_noext(savestate_name_auto, path_get(RARCH_PATH_SAVESTATE), file_path_str(FILE_PATH_AUTO_EXTENSION), sizeof(savestate_name_auto)); @@ -1711,17 +1707,17 @@ static void command_event_main_state(unsigned cmd) retro_ctx_size_info_t info; char path[PATH_MAX_LENGTH] = {0}; char msg[128] = {0}; - global_t *global = global_get_ptr(); settings_t *settings = config_get_ptr(); if (settings->state_slot > 0) snprintf(path, sizeof(path), "%s%d", - global->name.savestate, settings->state_slot); + path_get(RARCH_PATH_SAVESTATE), + settings->state_slot); else if (settings->state_slot < 0) fill_pathname_join_delim(path, - global->name.savestate, "auto", '.', sizeof(path)); + path_get(RARCH_PATH_SAVESTATE), "auto", '.', sizeof(path)); else - strlcpy(path, global->name.savestate, sizeof(path)); + strlcpy(path, path_get(RARCH_PATH_SAVESTATE), sizeof(path)); core_serialize_size(&info); diff --git a/configuration.c b/configuration.c index b7eff22ad3..92cd8733ea 100644 --- a/configuration.c +++ b/configuration.c @@ -2113,14 +2113,17 @@ static bool config_load_file(const char *path, bool set_defaults, else if (path_is_directory(tmp_str)) { + char tmp_str_local[PATH_MAX_LENGTH] = {0}; dir_set_savefile(tmp_str); - strlcpy(global->name.savefile, tmp_str, - sizeof(global->name.savefile)); - fill_pathname_dir(global->name.savefile, + strlcpy(tmp_str_local, tmp_str, + sizeof(tmp_str_local)); + fill_pathname_dir(tmp_str_local, path_get(RARCH_PATH_BASENAME), file_path_str(FILE_PATH_SRM_EXTENSION), - sizeof(global->name.savefile)); + sizeof(tmp_str_local)); + + path_set(RARCH_PATH_SAVEFILE, tmp_str_local); } else RARCH_WARN("savefile_directory is not a directory, ignoring ...\n"); @@ -2133,14 +2136,18 @@ static bool config_load_file(const char *path, bool set_defaults, dir_set_savestate(g_defaults.dir.savestate); else if (path_is_directory(tmp_str)) { + char tmp_str_local[PATH_MAX_LENGTH] = {0}; + dir_set_savestate(tmp_str); - strlcpy(global->name.savestate, tmp_str, - sizeof(global->name.savestate)); - fill_pathname_dir(global->name.savestate, + strlcpy(tmp_str_local, tmp_str, + sizeof(tmp_str_local)); + fill_pathname_dir(tmp_str_local, path_get(RARCH_PATH_BASENAME), file_path_str(FILE_PATH_STATE_EXTENSION), - sizeof(global->name.savestate)); + sizeof(tmp_str_local)); + + path_set(RARCH_PATH_SAVESTATE, tmp_str_local); } else RARCH_WARN("savestate_directory is not a directory, ignoring ...\n"); diff --git a/input/input_remapping.c b/input/input_remapping.c index 98b83b5107..93cd7bf43c 100644 --- a/input/input_remapping.c +++ b/input/input_remapping.c @@ -20,6 +20,7 @@ #include "input_remapping.h" #include "../configuration.h" +#include "../paths.h" #include "../runloop.h" /** @@ -40,8 +41,7 @@ bool input_remapping_load_file(void *data, const char *path) if (!conf || string_is_empty(path)) return false; - strlcpy(global->name.remapfile, path, - sizeof(global->name.remapfile)); + path_set(RARCH_PATH_REMAPFILE, path); for (i = 0; i < MAX_USERS; i++) { diff --git a/menu/cbs/menu_cbs_get_value.c b/menu/cbs/menu_cbs_get_value.c index 47a6c5ed18..a608d21261 100644 --- a/menu/cbs/menu_cbs_get_value.c +++ b/menu/cbs/menu_cbs_get_value.c @@ -109,13 +109,10 @@ static void menu_action_setting_disp_set_label_remap_file_load( const char *path, char *s2, size_t len2) { - global_t *global = global_get_ptr(); - *w = 19; strlcpy(s2, path, len2); - if (global) - fill_pathname_base(s, global->name.remapfile, - len); + fill_pathname_base(s, path_get(RARCH_PATH_REMAPFILE), + len); } static void menu_action_setting_disp_set_label_configurations( diff --git a/menu/cbs/menu_cbs_start.c b/menu/cbs/menu_cbs_start.c index 69ee869d96..f19a3ef947 100644 --- a/menu/cbs/menu_cbs_start.c +++ b/menu/cbs/menu_cbs_start.c @@ -33,6 +33,7 @@ #include "../../core_info.h" #include "../../managers/core_option_manager.h" #include "../../managers/cheat_manager.h" +#include "../../paths.h" #include "../../retroarch.h" #include "../../runloop.h" #include "../../performance_counters.h" @@ -49,12 +50,7 @@ static int action_start_remap_file_load(unsigned type, const char *label) { - global_t *global = global_get_ptr(); - - if (!global) - return -1; - - global->name.remapfile[0] = '\0'; + path_clear(RARCH_PATH_REMAPFILE); input_remapping_set_defaults(); return 0; } diff --git a/patch.c b/patch.c index ce2f7c5d86..2038d0ea8e 100644 --- a/patch.c +++ b/patch.c @@ -32,6 +32,7 @@ #include "msg_hash.h" #include "patch.h" +#include "paths.h" #include "retroarch.h" #include "runloop.h" #include "verbosity.h" @@ -555,37 +556,34 @@ error: static bool try_bps_patch(uint8_t **buf, ssize_t *size) { - global_t *global = global_get_ptr(); bool allow_bps = !rarch_ctl(RARCH_CTL_IS_UPS_PREF, NULL) && !rarch_ctl(RARCH_CTL_IS_IPS_PREF, NULL); - if (!allow_bps || string_is_empty(global->name.bps)) + if (!allow_bps || string_is_empty(path_get(RARCH_PATH_BPS))) return false; - return apply_patch_content(buf, size, "BPS", global->name.bps, + return apply_patch_content(buf, size, "BPS", path_get(RARCH_PATH_BPS), bps_apply_patch); } static bool try_ups_patch(uint8_t **buf, ssize_t *size) { - global_t *global = global_get_ptr(); bool allow_ups = !rarch_ctl(RARCH_CTL_IS_BPS_PREF, NULL) && !rarch_ctl(RARCH_CTL_IS_IPS_PREF, NULL); - if (!allow_ups || string_is_empty(global->name.ups)) + if (!allow_ups || string_is_empty(path_get(RARCH_PATH_UPS))) return false; - return apply_patch_content(buf, size, "UPS", global->name.ups, + return apply_patch_content(buf, size, "UPS", path_get(RARCH_PATH_UPS), ups_apply_patch); } static bool try_ips_patch(uint8_t **buf, ssize_t *size) { - global_t *global = global_get_ptr(); bool allow_ips = !rarch_ctl(RARCH_CTL_IS_UPS_PREF, NULL) && !rarch_ctl(RARCH_CTL_IS_BPS_PREF, NULL); - if (!allow_ips || string_is_empty(global->name.ips)) + if (!allow_ips || string_is_empty(path_get(RARCH_PATH_IPS))) return false; - return apply_patch_content(buf, size, "IPS", global->name.ips, + return apply_patch_content(buf, size, "IPS", path_get(RARCH_PATH_IPS), ips_apply_patch); } diff --git a/paths.c b/paths.c index caa0239f0c..91a5e437e2 100644 --- a/paths.c +++ b/paths.c @@ -51,6 +51,13 @@ /* For --subsystem content. */ static struct string_list *subsystem_fullpaths = NULL; +static char path_savefile[PATH_MAX_LENGTH] = {0}; +static char path_savestate[PATH_MAX_LENGTH] = {0}; +static char path_cheatfile[PATH_MAX_LENGTH] = {0}; +static char path_ups[PATH_MAX_LENGTH] = {0}; +static char path_bps[PATH_MAX_LENGTH] = {0}; +static char path_ips[PATH_MAX_LENGTH] = {0}; +static char path_remapfile[PATH_MAX_LENGTH] = {0}; char subsystem_path[PATH_MAX_LENGTH] = {0}; static char path_default_shader_preset[PATH_MAX_LENGTH] = {0}; @@ -70,7 +77,6 @@ void path_set_redirect(void) uint32_t library_name_hash = 0; bool check_library_name_hash = false; rarch_system_info_t *info = NULL; - global_t *global = global_get_ptr(); const char *old_savefile_dir = dir_get_savefile(); const char *old_savestate_dir = dir_get_savestate(); @@ -166,45 +172,50 @@ void path_set_redirect(void) path_basedir(current_savefile_dir); } - if (global) + if(path_is_directory(current_savefile_dir)) + path_set(RARCH_PATH_SAVEFILE, current_savefile_dir); + + if(path_is_directory(current_savestate_dir)) + path_set(RARCH_PATH_SAVESTATE, current_savestate_dir); + + if (path_is_directory(path_get(RARCH_PATH_SAVEFILE))) { - if(path_is_directory(current_savefile_dir)) - strlcpy(global->name.savefile, current_savefile_dir, - sizeof(global->name.savefile)); + char savefile_path[PATH_MAX_LENGTH] = {0}; - if(path_is_directory(current_savestate_dir)) - strlcpy(global->name.savestate, current_savestate_dir, - sizeof(global->name.savestate)); + fill_pathname_dir(savefile_path, path_main_basename, + file_path_str(FILE_PATH_SRM_EXTENSION), + sizeof(savefile_path)); - if (path_is_directory(global->name.savefile)) - { - fill_pathname_dir(global->name.savefile, path_main_basename, - file_path_str(FILE_PATH_SRM_EXTENSION), - sizeof(global->name.savefile)); - RARCH_LOG("%s \"%s\".\n", - msg_hash_to_str(MSG_REDIRECTING_SAVEFILE_TO), - global->name.savefile); - } + path_set(RARCH_PATH_SAVEFILE, savefile_path); + RARCH_LOG("%s \"%s\".\n", + msg_hash_to_str(MSG_REDIRECTING_SAVEFILE_TO), + savefile_path); + } - if (path_is_directory(global->name.savestate)) - { - fill_pathname_dir(global->name.savestate, path_main_basename, - file_path_str(FILE_PATH_STATE_EXTENSION), - sizeof(global->name.savestate)); - RARCH_LOG("%s \"%s\".\n", - msg_hash_to_str(MSG_REDIRECTING_SAVESTATE_TO), - global->name.savestate); - } + if (path_is_directory(path_get(RARCH_PATH_SAVESTATE))) + { + char savestate_path[PATH_MAX_LENGTH] = {0}; - if (path_is_directory(global->name.cheatfile)) - { - fill_pathname_dir(global->name.cheatfile, path_main_basename, - file_path_str(FILE_PATH_STATE_EXTENSION), - sizeof(global->name.cheatfile)); - RARCH_LOG("%s \"%s\".\n", - msg_hash_to_str(MSG_REDIRECTING_CHEATFILE_TO), - global->name.cheatfile); - } + fill_pathname_dir(savestate_path, path_main_basename, + file_path_str(FILE_PATH_STATE_EXTENSION), + sizeof(savestate_path)); + path_set(RARCH_PATH_SAVESTATE, savestate_path); + RARCH_LOG("%s \"%s\".\n", + msg_hash_to_str(MSG_REDIRECTING_SAVESTATE_TO), + savestate_path); + } + + if (path_is_directory(path_get(RARCH_PATH_CHEATFILE))) + { + char cheatfile_path[PATH_MAX_LENGTH] = {0}; + + fill_pathname_dir(cheatfile_path, path_main_basename, + file_path_str(FILE_PATH_STATE_EXTENSION), + sizeof(cheatfile_path)); + path_set(RARCH_PATH_CHEATFILE, cheatfile_path); + RARCH_LOG("%s \"%s\".\n", + msg_hash_to_str(MSG_REDIRECTING_CHEATFILE_TO), + cheatfile_path); } } @@ -264,7 +275,6 @@ void path_set_special(char **argv, unsigned num_content) { unsigned i; union string_list_elem_attr attr; - global_t *global = global_get_ptr(); /* First content file is the significant one. */ path_set_basename(argv[0]); @@ -279,22 +289,29 @@ void path_set_special(char **argv, unsigned num_content) /* We defer SRAM path updates until we can resolve it. * It is more complicated for special content types. */ - if (global) + if (!retroarch_override_setting_is_set(RARCH_OVERRIDE_SETTING_STATE_PATH)) { - if (!retroarch_override_setting_is_set(RARCH_OVERRIDE_SETTING_STATE_PATH)) - fill_pathname_noext(global->name.savestate, path_main_basename, - file_path_str(FILE_PATH_STATE_EXTENSION), - sizeof(global->name.savestate)); + char tmp[PATH_MAX_LENGTH] = {0}; - if (path_is_directory(global->name.savestate)) - { - fill_pathname_dir(global->name.savestate, path_main_basename, - file_path_str(FILE_PATH_STATE_EXTENSION), - sizeof(global->name.savestate)); - RARCH_LOG("%s \"%s\".\n", - msg_hash_to_str(MSG_REDIRECTING_SAVESTATE_TO), - global->name.savestate); - } + fill_pathname_noext(tmp, path_main_basename, + file_path_str(FILE_PATH_STATE_EXTENSION), + sizeof(tmp)); + + path_set(RARCH_PATH_SAVESTATE, tmp); + } + + if (path_is_directory(path_get(RARCH_PATH_SAVESTATE))) + { + char tmp[PATH_MAX_LENGTH] = {0}; + + fill_pathname_dir(tmp, path_main_basename, + file_path_str(FILE_PATH_STATE_EXTENSION), + sizeof(tmp)); + path_set(RARCH_PATH_SAVESTATE, tmp); + + RARCH_LOG("%s \"%s\".\n", + msg_hash_to_str(MSG_REDIRECTING_SAVESTATE_TO), + tmp); } } @@ -303,7 +320,6 @@ static bool path_init_subsystem(void) unsigned i, j; const struct retro_subsystem_info *info = NULL; rarch_system_info_t *system = NULL; - global_t *global = global_get_ptr(); runloop_ctl(RUNLOOP_CTL_SYSTEM_INFO_GET, &system); @@ -362,25 +378,31 @@ static bool path_init_subsystem(void) } } - if (global) + /* Let other relevant paths be inferred from the main SRAM location. */ + if (!retroarch_override_setting_is_set(RARCH_OVERRIDE_SETTING_SAVE_PATH)) { - /* Let other relevant paths be inferred from the main SRAM location. */ - if (!retroarch_override_setting_is_set(RARCH_OVERRIDE_SETTING_SAVE_PATH)) - fill_pathname_noext(global->name.savefile, - path_main_basename, - file_path_str(FILE_PATH_SRM_EXTENSION), - sizeof(global->name.savefile)); + char tmp[PATH_MAX_LENGTH] = {0}; - if (path_is_directory(global->name.savefile)) - { - fill_pathname_dir(global->name.savefile, - path_main_basename, - file_path_str(FILE_PATH_SRM_EXTENSION), - sizeof(global->name.savefile)); - RARCH_LOG("%s \"%s\".\n", - msg_hash_to_str(MSG_REDIRECTING_SAVEFILE_TO), - global->name.savefile); - } + fill_pathname_noext(tmp, + path_main_basename, + file_path_str(FILE_PATH_SRM_EXTENSION), + sizeof(tmp)); + path_set(RARCH_PATH_SAVEFILE, tmp); + } + + if (path_is_directory(path_get(RARCH_PATH_SAVEFILE))) + { + char tmp[PATH_MAX_LENGTH] = {0}; + + fill_pathname_dir(tmp, + path_main_basename, + file_path_str(FILE_PATH_SRM_EXTENSION), + sizeof(tmp)); + path_set(RARCH_PATH_SAVEFILE, tmp); + + RARCH_LOG("%s \"%s\".\n", + msg_hash_to_str(MSG_REDIRECTING_SAVEFILE_TO), + tmp); } return true; @@ -426,32 +448,44 @@ static void path_init_savefile_internal(void) void path_fill_names(void) { - global_t *global = global_get_ptr(); - path_init_savefile_internal(); - - if (global) - bsv_movie_set_path(global->name.savefile); + + bsv_movie_set_path(path_get(RARCH_PATH_SAVEFILE)); if (string_is_empty(path_main_basename)) return; - if (global) + if (string_is_empty(path_get(RARCH_PATH_UPS))) { - if (string_is_empty(global->name.ups)) - fill_pathname_noext(global->name.ups, path_main_basename, - file_path_str(FILE_PATH_UPS_EXTENSION), - sizeof(global->name.ups)); + char tmp[PATH_MAX_LENGTH] = {0}; - if (string_is_empty(global->name.bps)) - fill_pathname_noext(global->name.bps, path_main_basename, - file_path_str(FILE_PATH_BPS_EXTENSION), - sizeof(global->name.bps)); + fill_pathname_noext(tmp, path_main_basename, + file_path_str(FILE_PATH_UPS_EXTENSION), + sizeof(tmp)); - if (string_is_empty(global->name.ips)) - fill_pathname_noext(global->name.ips, path_main_basename, - file_path_str(FILE_PATH_IPS_EXTENSION), - sizeof(global->name.ips)); + path_set(RARCH_PATH_UPS, tmp); + } + + if (string_is_empty(path_get(RARCH_PATH_BPS))) + { + char tmp[PATH_MAX_LENGTH] = {0}; + + fill_pathname_noext(tmp, path_main_basename, + file_path_str(FILE_PATH_BPS_EXTENSION), + sizeof(tmp)); + + path_set(RARCH_PATH_BPS, tmp); + } + + if (string_is_empty(path_get(RARCH_PATH_IPS))) + { + char tmp[PATH_MAX_LENGTH] = {0}; + + fill_pathname_noext(tmp, path_main_basename, + file_path_str(FILE_PATH_IPS_EXTENSION), + sizeof(tmp)); + + path_set(RARCH_PATH_IPS, tmp); } } @@ -466,6 +500,20 @@ const char *path_get(enum rarch_path_type type) { switch (type) { + case RARCH_PATH_SAVEFILE: + return path_savefile; + case RARCH_PATH_SAVESTATE: + return path_savestate; + case RARCH_PATH_CHEATFILE: + return path_cheatfile; + case RARCH_PATH_REMAPFILE: + return path_remapfile; + case RARCH_PATH_IPS: + return path_ips; + case RARCH_PATH_BPS: + return path_bps; + case RARCH_PATH_UPS: + return path_ups; case RARCH_PATH_BASENAME: return path_main_basename; case RARCH_PATH_CORE_OPTIONS: @@ -500,22 +548,35 @@ size_t path_get_core_size(void) static void path_set_names(const char *path) { - global_t *global = global_get_ptr(); - path_set_basename(path); - if (global) + if (!retroarch_override_setting_is_set(RARCH_OVERRIDE_SETTING_SAVE_PATH)) { - if (!retroarch_override_setting_is_set(RARCH_OVERRIDE_SETTING_SAVE_PATH)) - fill_pathname_noext(global->name.savefile, path_main_basename, - file_path_str(FILE_PATH_SRM_EXTENSION), sizeof(global->name.savefile)); + char tmp[PATH_MAX_LENGTH] = {0}; - if (!retroarch_override_setting_is_set(RARCH_OVERRIDE_SETTING_STATE_PATH)) - fill_pathname_noext(global->name.savestate, path_main_basename, - file_path_str(FILE_PATH_STATE_EXTENSION), sizeof(global->name.savestate)); + fill_pathname_noext(tmp, path_main_basename, + file_path_str(FILE_PATH_SRM_EXTENSION), sizeof(tmp)); - fill_pathname_noext(global->name.cheatfile, path_main_basename, - file_path_str(FILE_PATH_CHT_EXTENSION), sizeof(global->name.cheatfile)); + path_set(RARCH_PATH_SAVEFILE, tmp); + } + + if (!retroarch_override_setting_is_set(RARCH_OVERRIDE_SETTING_STATE_PATH)) + { + char tmp[PATH_MAX_LENGTH] = {0}; + + fill_pathname_noext(tmp, path_main_basename, + file_path_str(FILE_PATH_STATE_EXTENSION), sizeof(tmp)); + + path_set(RARCH_PATH_SAVESTATE, tmp); + } + + { + char tmp[PATH_MAX_LENGTH] = {0}; + + fill_pathname_noext(tmp, path_main_basename, + file_path_str(FILE_PATH_CHT_EXTENSION), sizeof(tmp)); + + path_set(RARCH_PATH_CHEATFILE, tmp); } path_set_redirect(); @@ -531,6 +592,34 @@ bool path_set(enum rarch_path_type type, const char *path) case RARCH_PATH_NAMES: path_set_names(path); break; + case RARCH_PATH_SAVEFILE: + strlcpy(path_savefile, path, + sizeof(path_savefile)); + break; + case RARCH_PATH_SAVESTATE: + strlcpy(path_savestate, path, + sizeof(path_savestate)); + break; + case RARCH_PATH_CHEATFILE: + strlcpy(path_cheatfile, path, + sizeof(path_cheatfile)); + break; + case RARCH_PATH_REMAPFILE: + strlcpy(path_remapfile, path, + sizeof(path_remapfile)); + break; + case RARCH_PATH_IPS: + strlcpy(path_ips, path, + sizeof(path_ips)); + break; + case RARCH_PATH_BPS: + strlcpy(path_bps, path, + sizeof(path_bps)); + break; + case RARCH_PATH_UPS: + strlcpy(path_ups, path, + sizeof(path_ups)); + break; case RARCH_PATH_CORE: strlcpy(path_libretro, path, sizeof(path_libretro)); @@ -571,6 +660,34 @@ bool path_is_empty(enum rarch_path_type type) { switch (type) { + case RARCH_PATH_SAVEFILE: + if (string_is_empty(path_savefile)) + return true; + break; + case RARCH_PATH_SAVESTATE: + if (string_is_empty(path_savestate)) + return true; + break; + case RARCH_PATH_CHEATFILE: + if (string_is_empty(path_cheatfile)) + return true; + break; + case RARCH_PATH_REMAPFILE: + if (string_is_empty(path_remapfile)) + return true; + break; + case RARCH_PATH_IPS: + if (string_is_empty(path_ips)) + return true; + break; + case RARCH_PATH_BPS: + if (string_is_empty(path_bps)) + return true; + break; + case RARCH_PATH_UPS: + if (string_is_empty(path_ups)) + return true; + break; case RARCH_PATH_SUBSYSTEM: if (string_is_empty(subsystem_path)) return true; @@ -608,6 +725,27 @@ void path_clear(enum rarch_path_type type) { switch (type) { + case RARCH_PATH_SAVEFILE: + *path_savefile = '\0'; + break; + case RARCH_PATH_SAVESTATE: + *path_savestate = '\0'; + break; + case RARCH_PATH_CHEATFILE: + *path_cheatfile = '\0'; + break; + case RARCH_PATH_REMAPFILE: + *path_remapfile = '\0'; + break; + case RARCH_PATH_IPS: + *path_ips = '\0'; + break; + case RARCH_PATH_BPS: + *path_bps = '\0'; + break; + case RARCH_PATH_UPS: + *path_ups = '\0'; + break; case RARCH_PATH_SUBSYSTEM: *subsystem_path = '\0'; break; diff --git a/paths.h b/paths.h index 83043be421..ec01bb6091 100644 --- a/paths.h +++ b/paths.h @@ -38,6 +38,13 @@ enum rarch_path_type RARCH_PATH_NAMES, RARCH_PATH_CONFIG, RARCH_PATH_CONTENT, + RARCH_PATH_SAVEFILE, + RARCH_PATH_SAVESTATE, + RARCH_PATH_CHEATFILE, + RARCH_PATH_UPS, + RARCH_PATH_IPS, + RARCH_PATH_BPS, + RARCH_PATH_REMAPFILE, RARCH_PATH_CONFIG_APPEND, RARCH_PATH_CORE_OPTIONS, RARCH_PATH_DEFAULT_SHADER_PRESET, diff --git a/retroarch.c b/retroarch.c index 6b4aef58ad..39a30ad035 100644 --- a/retroarch.c +++ b/retroarch.c @@ -477,9 +477,9 @@ static void retroarch_parse_input(int argc, char *argv[]) rarch_ctl(RARCH_CTL_UNSET_UPS_PREF, NULL); rarch_ctl(RARCH_CTL_UNSET_IPS_PREF, NULL); rarch_ctl(RARCH_CTL_UNSET_BPS_PREF, NULL); - *global->name.ups = '\0'; - *global->name.bps = '\0'; - *global->name.ips = '\0'; + path_clear(RARCH_PATH_UPS); + path_clear(RARCH_PATH_BPS); + path_clear(RARCH_PATH_IPS); runloop_ctl(RUNLOOP_CTL_UNSET_OVERRIDES_ACTIVE, NULL); @@ -553,8 +553,7 @@ static void retroarch_parse_input(int argc, char *argv[]) break; case 's': - strlcpy(global->name.savefile, optarg, - sizeof(global->name.savefile)); + path_set(RARCH_PATH_SAVEFILE, optarg); retroarch_override_setting_set( RARCH_OVERRIDE_SETTING_SAVE_PATH); break; @@ -564,8 +563,7 @@ static void retroarch_parse_input(int argc, char *argv[]) break; case 'S': - strlcpy(global->name.savestate, optarg, - sizeof(global->name.savestate)); + path_set(RARCH_PATH_SAVESTATE, optarg); retroarch_override_setting_set( RARCH_OVERRIDE_SETTING_STATE_PATH); break; @@ -719,22 +717,19 @@ static void retroarch_parse_input(int argc, char *argv[]) #endif case RA_OPT_BPS: - strlcpy(global->name.bps, optarg, - sizeof(global->name.bps)); + path_set(RARCH_PATH_BPS, optarg); rarch_ctl(RARCH_CTL_SET_BPS_PREF, NULL); retroarch_override_setting_set(RARCH_OVERRIDE_SETTING_BPS_PREF); break; case 'U': - strlcpy(global->name.ups, optarg, - sizeof(global->name.ups)); + path_set(RARCH_PATH_UPS, optarg); rarch_ctl(RARCH_CTL_SET_UPS_PREF, NULL); retroarch_override_setting_set(RARCH_OVERRIDE_SETTING_UPS_PREF); break; case RA_OPT_IPS: - strlcpy(global->name.ips, optarg, - sizeof(global->name.ips)); + path_set(RARCH_PATH_IPS, optarg); rarch_ctl(RARCH_CTL_SET_IPS_PREF, NULL); retroarch_override_setting_set(RARCH_OVERRIDE_SETTING_IPS_PREF); break; @@ -856,12 +851,12 @@ static void retroarch_parse_input(int argc, char *argv[]) /* Copy SRM/state dirs used, so they can be reused on reentrancy. */ if (retroarch_override_setting_is_set(RARCH_OVERRIDE_SETTING_SAVE_PATH) && - path_is_directory(global->name.savefile)) - dir_set_savefile(global->name.savefile); + path_is_directory(path_get(RARCH_PATH_SAVEFILE))) + dir_set_savefile(path_get(RARCH_PATH_SAVEFILE)); if (retroarch_override_setting_is_set(RARCH_OVERRIDE_SETTING_STATE_PATH) && - path_is_directory(global->name.savestate)) - dir_set_savestate(global->name.savestate); + path_is_directory(path_get(RARCH_PATH_SAVESTATE))) + dir_set_savestate(path_get(RARCH_PATH_SAVESTATE)); } static bool retroarch_init_state(void) diff --git a/runloop.c b/runloop.c index cdf2fe2e11..fb1ad59d75 100644 --- a/runloop.c +++ b/runloop.c @@ -744,6 +744,13 @@ bool runloop_ctl(enum runloop_ctl_state state, void *data) rarch_ctl(RARCH_CTL_UNSET_UPS_PREF, NULL); rarch_ctl(RARCH_CTL_UNSET_PATCH_BLOCKED, NULL); path_clear(RARCH_PATH_CONTENT); + path_clear(RARCH_PATH_SAVEFILE); + path_clear(RARCH_PATH_SAVESTATE); + path_clear(RARCH_PATH_CHEATFILE); + path_clear(RARCH_PATH_REMAPFILE); + path_clear(RARCH_PATH_IPS); + path_clear(RARCH_PATH_UPS); + path_clear(RARCH_PATH_BPS); runloop_overrides_active = false; core_unset_input_descriptors(); diff --git a/runloop.h b/runloop.h index 0b9b74a154..aecfeb316b 100644 --- a/runloop.h +++ b/runloop.h @@ -142,17 +142,6 @@ typedef struct global bool libretro_device[MAX_USERS]; } has_set; - struct - { - char savefile[PATH_MAX_LENGTH]; - char savestate[PATH_MAX_LENGTH]; - char cheatfile[PATH_MAX_LENGTH]; - char ups[PATH_MAX_LENGTH]; - char bps[PATH_MAX_LENGTH]; - char ips[PATH_MAX_LENGTH]; - char remapfile[PATH_MAX_LENGTH]; - } name; - #ifdef HAVE_NETWORKING /* Netplay. */ struct diff --git a/tasks/task_save.c b/tasks/task_save.c index cdffdfe78f..96324d0992 100644 --- a/tasks/task_save.c +++ b/tasks/task_save.c @@ -41,6 +41,7 @@ #include "../file_path_special.h" #include "../configuration.h" #include "../msg_hash.h" +#include "../paths.h" #include "../retroarch.h" #include "../runloop.h" #include "../verbosity.h" @@ -947,15 +948,14 @@ void path_init_savefile_rtc(void) { union string_list_elem_attr attr; char savefile_name_rtc[PATH_MAX_LENGTH] = {0}; - global_t *global = global_get_ptr(); attr.i = RETRO_MEMORY_SAVE_RAM; - string_list_append(task_save_files, global->name.savefile, attr); + string_list_append(task_save_files, path_get(RARCH_PATH_SAVEFILE), attr); /* Infer .rtc save path from save ram path. */ attr.i = RETRO_MEMORY_RTC; fill_pathname(savefile_name_rtc, - global->name.savefile, + path_get(RARCH_PATH_SAVEFILE), file_path_str(FILE_PATH_RTC_EXTENSION), sizeof(savefile_name_rtc)); string_list_append(task_save_files, savefile_name_rtc, attr);