diff --git a/configuration.c b/configuration.c index a5ac20e6a5..9892ce1688 100644 --- a/configuration.c +++ b/configuration.c @@ -575,7 +575,6 @@ static int populate_settings_path(settings_t *settings, struct config_path_setti { unsigned count = 0; struct config_path_setting *tmp = NULL; - global_t *global = global_get_ptr(); /* Paths */ #ifdef HAVE_XMB @@ -590,9 +589,9 @@ static int populate_settings_path(settings_t *settings, struct config_path_setti SETTING_PATH("netplay_ip_address", path_get_ptr(RARCH_PATH_SERVER), false, NULL, true); #endif SETTING_PATH("recording_output_directory", - global->record.output_dir, false, NULL, true); + dir_get_ptr(RARCH_DIR_RECORD_OUTPUT), false, NULL, true); SETTING_PATH("recording_config_directory", - global->record.config_dir, false, NULL, true); + dir_get_ptr(RARCH_DIR_RECORD_CONFIG), false, NULL, true); SETTING_PATH("libretro_directory", settings->directory.libretro, false, NULL, false); SETTING_PATH("core_options_path", @@ -1178,8 +1177,8 @@ static void config_set_defaults(void) if (!retroarch_override_setting_is_set(RARCH_OVERRIDE_SETTING_IPS_PREF)) rarch_ctl(RARCH_CTL_UNSET_IPS_PREF, NULL); - *global->record.output_dir = '\0'; - *global->record.config_dir = '\0'; + dir_clear(RARCH_DIR_RECORD_OUTPUT); + dir_clear(RARCH_DIR_RECORD_CONFIG); *settings->path.core_options = '\0'; *settings->path.content_history = '\0'; diff --git a/dirs.c b/dirs.c index 0f6e6cbd10..ee5e71c45e 100644 --- a/dirs.c +++ b/dirs.c @@ -40,10 +40,12 @@ struct rarch_dir_list static struct rarch_dir_list dir_shader_list; -static char dir_osk_overlay[PATH_MAX_LENGTH] = {0}; -static char dir_system[PATH_MAX_LENGTH] = {0}; -static char dir_savefile[PATH_MAX_LENGTH] = {0}; -static char dir_savestate[PATH_MAX_LENGTH] = {0}; +static char dir_record_output[PATH_MAX_LENGTH] = {0}; +static char dir_record_config[PATH_MAX_LENGTH] = {0}; +static char dir_osk_overlay[PATH_MAX_LENGTH] = {0}; +static char dir_system[PATH_MAX_LENGTH] = {0}; +static char dir_savefile[PATH_MAX_LENGTH] = {0}; +static char dir_savestate[PATH_MAX_LENGTH] = {0}; static bool shader_dir_init(struct rarch_dir_list *dir_list) { @@ -172,6 +174,10 @@ bool dir_is_empty(enum rarch_dir_type type) { switch (type) { + case RARCH_DIR_RECORD_OUTPUT: + return string_is_empty(dir_record_output); + case RARCH_DIR_RECORD_CONFIG: + return string_is_empty(dir_record_config); case RARCH_DIR_SYSTEM: return string_is_empty(dir_system); case RARCH_DIR_SAVEFILE: @@ -190,10 +196,14 @@ bool dir_is_empty(enum rarch_dir_type type) /* get size functions */ -size_t dir_get_size(enum rarch_dir_type type) +size_t dir_get_ptr_size(enum rarch_dir_type type) { switch (type) { + case RARCH_DIR_RECORD_OUTPUT: + return sizeof(dir_record_output); + case RARCH_DIR_RECORD_CONFIG: + return sizeof(dir_record_config); case RARCH_DIR_SYSTEM: return sizeof(dir_system); case RARCH_DIR_SAVEFILE: @@ -216,6 +226,12 @@ void dir_clear(enum rarch_dir_type type) { switch (type) { + case RARCH_DIR_RECORD_OUTPUT: + *dir_record_output = '\0'; + break; + case RARCH_DIR_RECORD_CONFIG: + *dir_record_config = '\0'; + break; case RARCH_DIR_SYSTEM: *dir_system = '\0'; break; @@ -248,6 +264,10 @@ char *dir_get_ptr(enum rarch_dir_type type) { switch (type) { + case RARCH_DIR_RECORD_OUTPUT: + return dir_record_output; + case RARCH_DIR_RECORD_CONFIG: + return dir_record_config; case RARCH_DIR_SYSTEM: return dir_system; case RARCH_DIR_SAVEFILE: @@ -270,6 +290,10 @@ const char *dir_get(enum rarch_dir_type type) { switch (type) { + case RARCH_DIR_RECORD_OUTPUT: + return dir_record_output; + case RARCH_DIR_RECORD_CONFIG: + return dir_record_config; case RARCH_DIR_OSK_OVERLAY: return dir_osk_overlay; case RARCH_DIR_SYSTEM: @@ -292,6 +316,14 @@ void dir_set(enum rarch_dir_type type, const char *path) { switch (type) { + case RARCH_DIR_RECORD_OUTPUT: + strlcpy(dir_record_output, path, + sizeof(dir_record_output)); + break; + case RARCH_DIR_RECORD_CONFIG: + strlcpy(dir_record_config, path, + sizeof(dir_record_config)); + break; case RARCH_DIR_OSK_OVERLAY: strlcpy(dir_osk_overlay, path, sizeof(dir_osk_overlay)); diff --git a/dirs.h b/dirs.h index 0d5f37c4e0..0fd14fe15a 100644 --- a/dirs.h +++ b/dirs.h @@ -27,7 +27,9 @@ enum rarch_dir_type RARCH_DIR_SYSTEM, RARCH_DIR_SAVEFILE, RARCH_DIR_SAVESTATE, - RARCH_DIR_OSK_OVERLAY + RARCH_DIR_OSK_OVERLAY, + RARCH_DIR_RECORD_OUTPUT, + RARCH_DIR_RECORD_CONFIG }; bool dir_init_shader(void); @@ -42,7 +44,7 @@ void dir_clear(enum rarch_dir_type type); void dir_clear_all(void); -size_t dir_get_size(enum rarch_dir_type type); +size_t dir_get_ptr_size(enum rarch_dir_type type); char *dir_get_ptr(enum rarch_dir_type type); diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index bac6a650f9..e16c721b3f 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -43,6 +43,7 @@ #include "../../managers/cheat_manager.h" #include "../../tasks/tasks_internal.h" #include "../../input/input_remapping.h" +#include "../../dirs.h" #include "../../paths.h" #include "../../retroarch.h" #include "../../runloop.h" @@ -351,7 +352,7 @@ int generic_action_ok_displaylist_push(const char *path, menu_displaylist_reset_filebrowser(); info.type = type; info.directory_ptr = idx; - info_path = global->record.config_dir; + info_path = dir_get(RARCH_DIR_RECORD_CONFIG); info_label = label; dl_type = DISPLAYLIST_FILE_BROWSER_SELECT_FILE; } diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 630e2a2e58..19292b54c6 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -6467,8 +6467,8 @@ static bool setting_append_list( { CONFIG_DIR( list, list_info, - global->record.output_dir, - sizeof(global->record.output_dir), + dir_get_ptr(RARCH_DIR_RECORD_OUTPUT), + dir_get_ptr_size(RARCH_DIR_RECORD_OUTPUT), msg_hash_to_str(MENU_ENUM_LABEL_RECORDING_OUTPUT_DIRECTORY), msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RECORDING_OUTPUT_DIRECTORY), "", @@ -6482,8 +6482,8 @@ static bool setting_append_list( CONFIG_DIR( list, list_info, - global->record.config_dir, - sizeof(global->record.config_dir), + dir_get_ptr(RARCH_DIR_RECORD_CONFIG), + dir_get_ptr_size(RARCH_DIR_RECORD_CONFIG), msg_hash_to_str(MENU_ENUM_LABEL_RECORDING_CONFIG_DIRECTORY), msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RECORDING_CONFIG_DIRECTORY), "", @@ -6514,7 +6514,7 @@ static bool setting_append_list( CONFIG_DIR( list, list_info, dir_get_ptr(RARCH_DIR_OSK_OVERLAY), - dir_get_size(RARCH_DIR_OSK_OVERLAY), + dir_get_ptr_size(RARCH_DIR_OSK_OVERLAY), msg_hash_to_str(MENU_ENUM_LABEL_OSK_OVERLAY_DIRECTORY), msg_hash_to_str(MENU_ENUM_LABEL_VALUE_OSK_OVERLAY_DIRECTORY), g_defaults.dir.osk_overlay, @@ -6590,7 +6590,7 @@ static bool setting_append_list( CONFIG_DIR( list, list_info, dir_get_ptr(RARCH_DIR_SAVEFILE), - dir_get_size(RARCH_DIR_SAVEFILE), + dir_get_ptr_size(RARCH_DIR_SAVEFILE), msg_hash_to_str(MENU_ENUM_LABEL_SAVEFILE_DIRECTORY), msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SAVEFILE_DIRECTORY), "", @@ -6605,7 +6605,7 @@ static bool setting_append_list( CONFIG_DIR( list, list_info, dir_get_ptr(RARCH_DIR_SAVESTATE), - dir_get_size(RARCH_DIR_SAVESTATE), + dir_get_ptr_size(RARCH_DIR_SAVESTATE), msg_hash_to_str(MENU_ENUM_LABEL_SAVESTATE_DIRECTORY), msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SAVESTATE_DIRECTORY), "", diff --git a/record/record_driver.c b/record/record_driver.c index 7d5545442c..a12a03f5ca 100644 --- a/record/record_driver.c +++ b/record/record_driver.c @@ -33,6 +33,7 @@ #include "../runloop.h" #include "../verbosity.h" #include "../msg_hash.h" +#include "../dirs.h" #include "../paths.h" #include "../list_special.h" @@ -332,7 +333,7 @@ bool recording_init(void) if (global->record.use_output_dir) fill_pathname_join(recording_file, - global->record.output_dir, + dir_get(RARCH_DIR_RECORD_OUTPUT), path_get(RARCH_PATH_RECORD), sizeof(recording_file)); diff --git a/runloop.c b/runloop.c index c8dcb87b10..ae049b2983 100644 --- a/runloop.c +++ b/runloop.c @@ -728,7 +728,6 @@ bool runloop_ctl(enum runloop_ctl_state state, void *data) break; case RUNLOOP_CTL_GLOBAL_FREE: { - global_t *global = NULL; command_event(CMD_EVENT_TEMPORARY_CONTENT_DEINIT, NULL); path_deinit_subsystem(); @@ -758,10 +757,16 @@ bool runloop_ctl(enum runloop_ctl_state state, void *data) core_unset_input_descriptors(); - global = global_get_ptr(); path_clear_all(); + dir_clear(RARCH_DIR_RECORD_CONFIG); + dir_clear(RARCH_DIR_RECORD_OUTPUT); dir_clear_all(); - memset(global, 0, sizeof(struct global)); + + { + global_t *global = global_get_ptr(); + memset(global, 0, sizeof(struct global)); + } + retroarch_override_setting_free_state(); } break; diff --git a/runloop.h b/runloop.h index a81bd187c1..3a6577b0bc 100644 --- a/runloop.h +++ b/runloop.h @@ -158,9 +158,6 @@ typedef struct global /* Recording. */ struct { - char output_dir[PATH_MAX_LENGTH]; - char config_dir[PATH_MAX_LENGTH]; - unsigned width; unsigned height;