Move global->name to paths.c

This commit is contained in:
twinaphex 2016-09-30 06:11:11 +02:00
parent 1266c0609a
commit 6ee7b733aa
12 changed files with 302 additions and 172 deletions

View File

@ -1206,9 +1206,9 @@ static void command_event_load_auto_state(void)
char msg[128] = {0}; char msg[128] = {0};
char savestate_name_auto[PATH_MAX_LENGTH] = {0}; char savestate_name_auto[PATH_MAX_LENGTH] = {0};
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
#ifdef HAVE_NETWORKING
global_t *global = global_get_ptr(); global_t *global = global_get_ptr();
#ifdef HAVE_NETWORKING
if (global->netplay.enable && !global->netplay.is_spectate) if (global->netplay.enable && !global->netplay.is_spectate)
return; return;
#endif #endif
@ -1221,7 +1221,7 @@ static void command_event_load_auto_state(void)
if (!settings->savestate_auto_load) if (!settings->savestate_auto_load)
return; 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), file_path_str(FILE_PATH_AUTO_EXTENSION),
sizeof(savestate_name_auto)); sizeof(savestate_name_auto));
@ -1246,21 +1246,20 @@ static void command_event_set_savestate_auto_index(void)
struct string_list *dir_list = NULL; struct string_list *dir_list = NULL;
unsigned max_idx = 0; unsigned max_idx = 0;
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
global_t *global = global_get_ptr();
if (!settings->savestate_auto_index) if (!settings->savestate_auto_index)
return; 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. * with the largest numeral suffix.
* *
* E.g. /foo/path/content.state, will try to find * E.g. /foo/path/content.state, will try to find
* /foo/path/content.state%d, where %d is the largest number available. * /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)); sizeof(state_dir));
fill_pathname_base(state_base, global->name.savestate, fill_pathname_base(state_base, path_get(RARCH_PATH_SAVESTATE),
sizeof(state_base)); sizeof(state_base));
if (!(dir_list = dir_list_new_special(state_dir, DIR_LIST_PLAIN, NULL))) 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; bool ret;
char savestate_name_auto[PATH_MAX_LENGTH] = {0}; char savestate_name_auto[PATH_MAX_LENGTH] = {0};
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
global_t *global = global_get_ptr();
if (!settings || !settings->savestate_auto_save) if (!settings || !settings->savestate_auto_save)
return false; return false;
if (!global)
return false;
if (rarch_ctl(RARCH_CTL_IS_DUMMY_CORE, NULL)) if (rarch_ctl(RARCH_CTL_IS_DUMMY_CORE, NULL))
return false; return false;
if (content_does_not_need_content()) if (content_does_not_need_content())
@ -1432,7 +1428,7 @@ static bool command_event_save_auto_state(void)
return false; return false;
#endif #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), file_path_str(FILE_PATH_AUTO_EXTENSION),
sizeof(savestate_name_auto)); sizeof(savestate_name_auto));
@ -1711,17 +1707,17 @@ static void command_event_main_state(unsigned cmd)
retro_ctx_size_info_t info; retro_ctx_size_info_t info;
char path[PATH_MAX_LENGTH] = {0}; char path[PATH_MAX_LENGTH] = {0};
char msg[128] = {0}; char msg[128] = {0};
global_t *global = global_get_ptr();
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
if (settings->state_slot > 0) if (settings->state_slot > 0)
snprintf(path, sizeof(path), "%s%d", 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) else if (settings->state_slot < 0)
fill_pathname_join_delim(path, fill_pathname_join_delim(path,
global->name.savestate, "auto", '.', sizeof(path)); path_get(RARCH_PATH_SAVESTATE), "auto", '.', sizeof(path));
else else
strlcpy(path, global->name.savestate, sizeof(path)); strlcpy(path, path_get(RARCH_PATH_SAVESTATE), sizeof(path));
core_serialize_size(&info); core_serialize_size(&info);

View File

@ -2113,14 +2113,17 @@ static bool config_load_file(const char *path, bool set_defaults,
else if (path_is_directory(tmp_str)) else if (path_is_directory(tmp_str))
{ {
char tmp_str_local[PATH_MAX_LENGTH] = {0};
dir_set_savefile(tmp_str); dir_set_savefile(tmp_str);
strlcpy(global->name.savefile, tmp_str, strlcpy(tmp_str_local, tmp_str,
sizeof(global->name.savefile)); sizeof(tmp_str_local));
fill_pathname_dir(global->name.savefile, fill_pathname_dir(tmp_str_local,
path_get(RARCH_PATH_BASENAME), path_get(RARCH_PATH_BASENAME),
file_path_str(FILE_PATH_SRM_EXTENSION), file_path_str(FILE_PATH_SRM_EXTENSION),
sizeof(global->name.savefile)); sizeof(tmp_str_local));
path_set(RARCH_PATH_SAVEFILE, tmp_str_local);
} }
else else
RARCH_WARN("savefile_directory is not a directory, ignoring ...\n"); 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); dir_set_savestate(g_defaults.dir.savestate);
else if (path_is_directory(tmp_str)) else if (path_is_directory(tmp_str))
{ {
char tmp_str_local[PATH_MAX_LENGTH] = {0};
dir_set_savestate(tmp_str); dir_set_savestate(tmp_str);
strlcpy(global->name.savestate, tmp_str, strlcpy(tmp_str_local, tmp_str,
sizeof(global->name.savestate)); sizeof(tmp_str_local));
fill_pathname_dir(global->name.savestate, fill_pathname_dir(tmp_str_local,
path_get(RARCH_PATH_BASENAME), path_get(RARCH_PATH_BASENAME),
file_path_str(FILE_PATH_STATE_EXTENSION), file_path_str(FILE_PATH_STATE_EXTENSION),
sizeof(global->name.savestate)); sizeof(tmp_str_local));
path_set(RARCH_PATH_SAVESTATE, tmp_str_local);
} }
else else
RARCH_WARN("savestate_directory is not a directory, ignoring ...\n"); RARCH_WARN("savestate_directory is not a directory, ignoring ...\n");

View File

@ -20,6 +20,7 @@
#include "input_remapping.h" #include "input_remapping.h"
#include "../configuration.h" #include "../configuration.h"
#include "../paths.h"
#include "../runloop.h" #include "../runloop.h"
/** /**
@ -40,8 +41,7 @@ bool input_remapping_load_file(void *data, const char *path)
if (!conf || string_is_empty(path)) if (!conf || string_is_empty(path))
return false; return false;
strlcpy(global->name.remapfile, path, path_set(RARCH_PATH_REMAPFILE, path);
sizeof(global->name.remapfile));
for (i = 0; i < MAX_USERS; i++) for (i = 0; i < MAX_USERS; i++)
{ {

View File

@ -109,13 +109,10 @@ static void menu_action_setting_disp_set_label_remap_file_load(
const char *path, const char *path,
char *s2, size_t len2) char *s2, size_t len2)
{ {
global_t *global = global_get_ptr();
*w = 19; *w = 19;
strlcpy(s2, path, len2); strlcpy(s2, path, len2);
if (global) fill_pathname_base(s, path_get(RARCH_PATH_REMAPFILE),
fill_pathname_base(s, global->name.remapfile, len);
len);
} }
static void menu_action_setting_disp_set_label_configurations( static void menu_action_setting_disp_set_label_configurations(

View File

@ -33,6 +33,7 @@
#include "../../core_info.h" #include "../../core_info.h"
#include "../../managers/core_option_manager.h" #include "../../managers/core_option_manager.h"
#include "../../managers/cheat_manager.h" #include "../../managers/cheat_manager.h"
#include "../../paths.h"
#include "../../retroarch.h" #include "../../retroarch.h"
#include "../../runloop.h" #include "../../runloop.h"
#include "../../performance_counters.h" #include "../../performance_counters.h"
@ -49,12 +50,7 @@
static int action_start_remap_file_load(unsigned type, const char *label) static int action_start_remap_file_load(unsigned type, const char *label)
{ {
global_t *global = global_get_ptr(); path_clear(RARCH_PATH_REMAPFILE);
if (!global)
return -1;
global->name.remapfile[0] = '\0';
input_remapping_set_defaults(); input_remapping_set_defaults();
return 0; return 0;
} }

16
patch.c
View File

@ -32,6 +32,7 @@
#include "msg_hash.h" #include "msg_hash.h"
#include "patch.h" #include "patch.h"
#include "paths.h"
#include "retroarch.h" #include "retroarch.h"
#include "runloop.h" #include "runloop.h"
#include "verbosity.h" #include "verbosity.h"
@ -555,37 +556,34 @@ error:
static bool try_bps_patch(uint8_t **buf, ssize_t *size) 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); 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 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); bps_apply_patch);
} }
static bool try_ups_patch(uint8_t **buf, ssize_t *size) 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); 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 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); ups_apply_patch);
} }
static bool try_ips_patch(uint8_t **buf, ssize_t *size) 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); 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 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); ips_apply_patch);
} }

332
paths.c
View File

@ -51,6 +51,13 @@
/* For --subsystem content. */ /* For --subsystem content. */
static struct string_list *subsystem_fullpaths = NULL; 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}; char subsystem_path[PATH_MAX_LENGTH] = {0};
static char path_default_shader_preset[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; uint32_t library_name_hash = 0;
bool check_library_name_hash = false; bool check_library_name_hash = false;
rarch_system_info_t *info = NULL; rarch_system_info_t *info = NULL;
global_t *global = global_get_ptr();
const char *old_savefile_dir = dir_get_savefile(); const char *old_savefile_dir = dir_get_savefile();
const char *old_savestate_dir = dir_get_savestate(); const char *old_savestate_dir = dir_get_savestate();
@ -166,45 +172,50 @@ void path_set_redirect(void)
path_basedir(current_savefile_dir); 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)) char savefile_path[PATH_MAX_LENGTH] = {0};
strlcpy(global->name.savefile, current_savefile_dir,
sizeof(global->name.savefile));
if(path_is_directory(current_savestate_dir)) fill_pathname_dir(savefile_path, path_main_basename,
strlcpy(global->name.savestate, current_savestate_dir, file_path_str(FILE_PATH_SRM_EXTENSION),
sizeof(global->name.savestate)); sizeof(savefile_path));
if (path_is_directory(global->name.savefile)) path_set(RARCH_PATH_SAVEFILE, savefile_path);
{ RARCH_LOG("%s \"%s\".\n",
fill_pathname_dir(global->name.savefile, path_main_basename, msg_hash_to_str(MSG_REDIRECTING_SAVEFILE_TO),
file_path_str(FILE_PATH_SRM_EXTENSION), savefile_path);
sizeof(global->name.savefile)); }
RARCH_LOG("%s \"%s\".\n",
msg_hash_to_str(MSG_REDIRECTING_SAVEFILE_TO),
global->name.savefile);
}
if (path_is_directory(global->name.savestate)) if (path_is_directory(path_get(RARCH_PATH_SAVESTATE)))
{ {
fill_pathname_dir(global->name.savestate, path_main_basename, char savestate_path[PATH_MAX_LENGTH] = {0};
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(global->name.cheatfile)) fill_pathname_dir(savestate_path, path_main_basename,
{ file_path_str(FILE_PATH_STATE_EXTENSION),
fill_pathname_dir(global->name.cheatfile, path_main_basename, sizeof(savestate_path));
file_path_str(FILE_PATH_STATE_EXTENSION), path_set(RARCH_PATH_SAVESTATE, savestate_path);
sizeof(global->name.cheatfile)); RARCH_LOG("%s \"%s\".\n",
RARCH_LOG("%s \"%s\".\n", msg_hash_to_str(MSG_REDIRECTING_SAVESTATE_TO),
msg_hash_to_str(MSG_REDIRECTING_CHEATFILE_TO), savestate_path);
global->name.cheatfile); }
}
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; unsigned i;
union string_list_elem_attr attr; union string_list_elem_attr attr;
global_t *global = global_get_ptr();
/* First content file is the significant one. */ /* First content file is the significant one. */
path_set_basename(argv[0]); 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. /* We defer SRAM path updates until we can resolve it.
* It is more complicated for special content types. */ * 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)) char tmp[PATH_MAX_LENGTH] = {0};
fill_pathname_noext(global->name.savestate, path_main_basename,
file_path_str(FILE_PATH_STATE_EXTENSION),
sizeof(global->name.savestate));
if (path_is_directory(global->name.savestate)) fill_pathname_noext(tmp, path_main_basename,
{ file_path_str(FILE_PATH_STATE_EXTENSION),
fill_pathname_dir(global->name.savestate, path_main_basename, sizeof(tmp));
file_path_str(FILE_PATH_STATE_EXTENSION),
sizeof(global->name.savestate)); path_set(RARCH_PATH_SAVESTATE, tmp);
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 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; unsigned i, j;
const struct retro_subsystem_info *info = NULL; const struct retro_subsystem_info *info = NULL;
rarch_system_info_t *system = NULL; rarch_system_info_t *system = NULL;
global_t *global = global_get_ptr();
runloop_ctl(RUNLOOP_CTL_SYSTEM_INFO_GET, &system); 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. */ char tmp[PATH_MAX_LENGTH] = {0};
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));
if (path_is_directory(global->name.savefile)) fill_pathname_noext(tmp,
{ path_main_basename,
fill_pathname_dir(global->name.savefile, file_path_str(FILE_PATH_SRM_EXTENSION),
path_main_basename, sizeof(tmp));
file_path_str(FILE_PATH_SRM_EXTENSION), path_set(RARCH_PATH_SAVEFILE, tmp);
sizeof(global->name.savefile)); }
RARCH_LOG("%s \"%s\".\n",
msg_hash_to_str(MSG_REDIRECTING_SAVEFILE_TO), if (path_is_directory(path_get(RARCH_PATH_SAVEFILE)))
global->name.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; return true;
@ -426,32 +448,44 @@ static void path_init_savefile_internal(void)
void path_fill_names(void) void path_fill_names(void)
{ {
global_t *global = global_get_ptr();
path_init_savefile_internal(); path_init_savefile_internal();
if (global) bsv_movie_set_path(path_get(RARCH_PATH_SAVEFILE));
bsv_movie_set_path(global->name.savefile);
if (string_is_empty(path_main_basename)) if (string_is_empty(path_main_basename))
return; return;
if (global) if (string_is_empty(path_get(RARCH_PATH_UPS)))
{ {
if (string_is_empty(global->name.ups)) char tmp[PATH_MAX_LENGTH] = {0};
fill_pathname_noext(global->name.ups, path_main_basename,
file_path_str(FILE_PATH_UPS_EXTENSION),
sizeof(global->name.ups));
if (string_is_empty(global->name.bps)) fill_pathname_noext(tmp, path_main_basename,
fill_pathname_noext(global->name.bps, path_main_basename, file_path_str(FILE_PATH_UPS_EXTENSION),
file_path_str(FILE_PATH_BPS_EXTENSION), sizeof(tmp));
sizeof(global->name.bps));
if (string_is_empty(global->name.ips)) path_set(RARCH_PATH_UPS, tmp);
fill_pathname_noext(global->name.ips, path_main_basename, }
file_path_str(FILE_PATH_IPS_EXTENSION),
sizeof(global->name.ips)); 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) 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: case RARCH_PATH_BASENAME:
return path_main_basename; return path_main_basename;
case RARCH_PATH_CORE_OPTIONS: case RARCH_PATH_CORE_OPTIONS:
@ -500,22 +548,35 @@ size_t path_get_core_size(void)
static void path_set_names(const char *path) static void path_set_names(const char *path)
{ {
global_t *global = global_get_ptr();
path_set_basename(path); 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)) char tmp[PATH_MAX_LENGTH] = {0};
fill_pathname_noext(global->name.savefile, path_main_basename,
file_path_str(FILE_PATH_SRM_EXTENSION), sizeof(global->name.savefile));
if (!retroarch_override_setting_is_set(RARCH_OVERRIDE_SETTING_STATE_PATH)) fill_pathname_noext(tmp, path_main_basename,
fill_pathname_noext(global->name.savestate, path_main_basename, file_path_str(FILE_PATH_SRM_EXTENSION), sizeof(tmp));
file_path_str(FILE_PATH_STATE_EXTENSION), sizeof(global->name.savestate));
fill_pathname_noext(global->name.cheatfile, path_main_basename, path_set(RARCH_PATH_SAVEFILE, tmp);
file_path_str(FILE_PATH_CHT_EXTENSION), sizeof(global->name.cheatfile)); }
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(); path_set_redirect();
@ -531,6 +592,34 @@ bool path_set(enum rarch_path_type type, const char *path)
case RARCH_PATH_NAMES: case RARCH_PATH_NAMES:
path_set_names(path); path_set_names(path);
break; 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: case RARCH_PATH_CORE:
strlcpy(path_libretro, path, strlcpy(path_libretro, path,
sizeof(path_libretro)); sizeof(path_libretro));
@ -571,6 +660,34 @@ bool path_is_empty(enum rarch_path_type type)
{ {
switch (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: case RARCH_PATH_SUBSYSTEM:
if (string_is_empty(subsystem_path)) if (string_is_empty(subsystem_path))
return true; return true;
@ -608,6 +725,27 @@ void path_clear(enum rarch_path_type type)
{ {
switch (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: case RARCH_PATH_SUBSYSTEM:
*subsystem_path = '\0'; *subsystem_path = '\0';
break; break;

View File

@ -38,6 +38,13 @@ enum rarch_path_type
RARCH_PATH_NAMES, RARCH_PATH_NAMES,
RARCH_PATH_CONFIG, RARCH_PATH_CONFIG,
RARCH_PATH_CONTENT, 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_CONFIG_APPEND,
RARCH_PATH_CORE_OPTIONS, RARCH_PATH_CORE_OPTIONS,
RARCH_PATH_DEFAULT_SHADER_PRESET, RARCH_PATH_DEFAULT_SHADER_PRESET,

View File

@ -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_UPS_PREF, NULL);
rarch_ctl(RARCH_CTL_UNSET_IPS_PREF, NULL); rarch_ctl(RARCH_CTL_UNSET_IPS_PREF, NULL);
rarch_ctl(RARCH_CTL_UNSET_BPS_PREF, NULL); rarch_ctl(RARCH_CTL_UNSET_BPS_PREF, NULL);
*global->name.ups = '\0'; path_clear(RARCH_PATH_UPS);
*global->name.bps = '\0'; path_clear(RARCH_PATH_BPS);
*global->name.ips = '\0'; path_clear(RARCH_PATH_IPS);
runloop_ctl(RUNLOOP_CTL_UNSET_OVERRIDES_ACTIVE, NULL); runloop_ctl(RUNLOOP_CTL_UNSET_OVERRIDES_ACTIVE, NULL);
@ -553,8 +553,7 @@ static void retroarch_parse_input(int argc, char *argv[])
break; break;
case 's': case 's':
strlcpy(global->name.savefile, optarg, path_set(RARCH_PATH_SAVEFILE, optarg);
sizeof(global->name.savefile));
retroarch_override_setting_set( retroarch_override_setting_set(
RARCH_OVERRIDE_SETTING_SAVE_PATH); RARCH_OVERRIDE_SETTING_SAVE_PATH);
break; break;
@ -564,8 +563,7 @@ static void retroarch_parse_input(int argc, char *argv[])
break; break;
case 'S': case 'S':
strlcpy(global->name.savestate, optarg, path_set(RARCH_PATH_SAVESTATE, optarg);
sizeof(global->name.savestate));
retroarch_override_setting_set( retroarch_override_setting_set(
RARCH_OVERRIDE_SETTING_STATE_PATH); RARCH_OVERRIDE_SETTING_STATE_PATH);
break; break;
@ -719,22 +717,19 @@ static void retroarch_parse_input(int argc, char *argv[])
#endif #endif
case RA_OPT_BPS: case RA_OPT_BPS:
strlcpy(global->name.bps, optarg, path_set(RARCH_PATH_BPS, optarg);
sizeof(global->name.bps));
rarch_ctl(RARCH_CTL_SET_BPS_PREF, NULL); rarch_ctl(RARCH_CTL_SET_BPS_PREF, NULL);
retroarch_override_setting_set(RARCH_OVERRIDE_SETTING_BPS_PREF); retroarch_override_setting_set(RARCH_OVERRIDE_SETTING_BPS_PREF);
break; break;
case 'U': case 'U':
strlcpy(global->name.ups, optarg, path_set(RARCH_PATH_UPS, optarg);
sizeof(global->name.ups));
rarch_ctl(RARCH_CTL_SET_UPS_PREF, NULL); rarch_ctl(RARCH_CTL_SET_UPS_PREF, NULL);
retroarch_override_setting_set(RARCH_OVERRIDE_SETTING_UPS_PREF); retroarch_override_setting_set(RARCH_OVERRIDE_SETTING_UPS_PREF);
break; break;
case RA_OPT_IPS: case RA_OPT_IPS:
strlcpy(global->name.ips, optarg, path_set(RARCH_PATH_IPS, optarg);
sizeof(global->name.ips));
rarch_ctl(RARCH_CTL_SET_IPS_PREF, NULL); rarch_ctl(RARCH_CTL_SET_IPS_PREF, NULL);
retroarch_override_setting_set(RARCH_OVERRIDE_SETTING_IPS_PREF); retroarch_override_setting_set(RARCH_OVERRIDE_SETTING_IPS_PREF);
break; 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. */ /* Copy SRM/state dirs used, so they can be reused on reentrancy. */
if (retroarch_override_setting_is_set(RARCH_OVERRIDE_SETTING_SAVE_PATH) && if (retroarch_override_setting_is_set(RARCH_OVERRIDE_SETTING_SAVE_PATH) &&
path_is_directory(global->name.savefile)) path_is_directory(path_get(RARCH_PATH_SAVEFILE)))
dir_set_savefile(global->name.savefile); dir_set_savefile(path_get(RARCH_PATH_SAVEFILE));
if (retroarch_override_setting_is_set(RARCH_OVERRIDE_SETTING_STATE_PATH) && if (retroarch_override_setting_is_set(RARCH_OVERRIDE_SETTING_STATE_PATH) &&
path_is_directory(global->name.savestate)) path_is_directory(path_get(RARCH_PATH_SAVESTATE)))
dir_set_savestate(global->name.savestate); dir_set_savestate(path_get(RARCH_PATH_SAVESTATE));
} }
static bool retroarch_init_state(void) static bool retroarch_init_state(void)

View File

@ -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_UPS_PREF, NULL);
rarch_ctl(RARCH_CTL_UNSET_PATCH_BLOCKED, NULL); rarch_ctl(RARCH_CTL_UNSET_PATCH_BLOCKED, NULL);
path_clear(RARCH_PATH_CONTENT); 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; runloop_overrides_active = false;
core_unset_input_descriptors(); core_unset_input_descriptors();

View File

@ -142,17 +142,6 @@ typedef struct global
bool libretro_device[MAX_USERS]; bool libretro_device[MAX_USERS];
} has_set; } 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 #ifdef HAVE_NETWORKING
/* Netplay. */ /* Netplay. */
struct struct

View File

@ -41,6 +41,7 @@
#include "../file_path_special.h" #include "../file_path_special.h"
#include "../configuration.h" #include "../configuration.h"
#include "../msg_hash.h" #include "../msg_hash.h"
#include "../paths.h"
#include "../retroarch.h" #include "../retroarch.h"
#include "../runloop.h" #include "../runloop.h"
#include "../verbosity.h" #include "../verbosity.h"
@ -947,15 +948,14 @@ void path_init_savefile_rtc(void)
{ {
union string_list_elem_attr attr; union string_list_elem_attr attr;
char savefile_name_rtc[PATH_MAX_LENGTH] = {0}; char savefile_name_rtc[PATH_MAX_LENGTH] = {0};
global_t *global = global_get_ptr();
attr.i = RETRO_MEMORY_SAVE_RAM; 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. */ /* Infer .rtc save path from save ram path. */
attr.i = RETRO_MEMORY_RTC; attr.i = RETRO_MEMORY_RTC;
fill_pathname(savefile_name_rtc, fill_pathname(savefile_name_rtc,
global->name.savefile, path_get(RARCH_PATH_SAVEFILE),
file_path_str(FILE_PATH_RTC_EXTENSION), file_path_str(FILE_PATH_RTC_EXTENSION),
sizeof(savefile_name_rtc)); sizeof(savefile_name_rtc));
string_list_append(task_save_files, savefile_name_rtc, attr); string_list_append(task_save_files, savefile_name_rtc, attr);