Rearrange structs

This commit is contained in:
twinaphex 2015-07-27 17:18:10 +02:00
parent a31192c55a
commit a70f09a90d
36 changed files with 1009 additions and 966 deletions

View File

@ -196,10 +196,10 @@ void lock_autosave(void)
unsigned i; unsigned i;
global_t *global = global_get_ptr(); global_t *global = global_get_ptr();
for (i = 0; i < global->num_autosave; i++) for (i = 0; i < global->autosave.num; i++)
{ {
if (global->autosave[i]) if (global->autosave.list[i])
autosave_lock(global->autosave[i]); autosave_lock(global->autosave.list[i]);
} }
} }
@ -213,10 +213,10 @@ void unlock_autosave(void)
unsigned i; unsigned i;
global_t *global = global_get_ptr(); global_t *global = global_get_ptr();
for (i = 0; i < global->num_autosave; i++) for (i = 0; i < global->autosave.num; i++)
{ {
if (global->autosave[i]) if (global->autosave.list[i])
autosave_unlock(global->autosave[i]); autosave_unlock(global->autosave.list[i]);
} }
} }

View File

@ -102,11 +102,11 @@ static void event_init_autosave(void)
if (settings->autosave_interval < 1 || !global->savefiles) if (settings->autosave_interval < 1 || !global->savefiles)
return; return;
if (!(global->autosave = (autosave_t**)calloc(global->savefiles->size, if (!(global->autosave.list = (autosave_t**)calloc(global->savefiles->size,
sizeof(*global->autosave)))) sizeof(*global->autosave.list))))
return; return;
global->num_autosave = global->savefiles->size; global->autosave.num = global->savefiles->size;
for (i = 0; i < global->savefiles->size; i++) for (i = 0; i < global->savefiles->size; i++)
{ {
@ -116,12 +116,12 @@ static void event_init_autosave(void)
if (pretro_get_memory_size(type) <= 0) if (pretro_get_memory_size(type) <= 0)
continue; continue;
global->autosave[i] = autosave_new(path, global->autosave.list[i] = autosave_new(path,
pretro_get_memory_data(type), pretro_get_memory_data(type),
pretro_get_memory_size(type), pretro_get_memory_size(type),
settings->autosave_interval); settings->autosave_interval);
if (!global->autosave[i]) if (!global->autosave.list[i])
RARCH_WARN("%s\n", msg_hash_to_str(MSG_AUTOSAVE_FAILED)); RARCH_WARN("%s\n", msg_hash_to_str(MSG_AUTOSAVE_FAILED));
} }
} }
@ -131,14 +131,14 @@ static void event_deinit_autosave(void)
unsigned i; unsigned i;
global_t *global = global_get_ptr(); global_t *global = global_get_ptr();
for (i = 0; i < global->num_autosave; i++) for (i = 0; i < global->autosave.num; i++)
autosave_free(global->autosave[i]); autosave_free(global->autosave.list[i]);
if (global->autosave) if (global->autosave.list)
free(global->autosave); free(global->autosave.list);
global->autosave = NULL;
global->num_autosave = 0; global->autosave.list = NULL;
global->autosave.num = 0;
} }
#endif #endif
@ -147,7 +147,7 @@ static void event_save_files(void)
unsigned i; unsigned i;
global_t *global = global_get_ptr(); global_t *global = global_get_ptr();
if (!global->savefiles || !global->use_sram) if (!global->savefiles || !global->sram.use)
return; return;
for (i = 0; i < global->savefiles->size; i++) for (i = 0; i < global->savefiles->size; i++)
@ -543,9 +543,11 @@ static void event_deinit_core(bool reinit)
/* per-core saves: restore the original path so the config is not affected */ /* per-core saves: restore the original path so the config is not affected */
if(settings->sort_savefiles_enable) if(settings->sort_savefiles_enable)
strlcpy(global->savefile_dir,orig_savefile_dir,sizeof(global->savefile_dir)); strlcpy(global->dir.savefile, orig_savefile_dir,
sizeof(global->dir.savefile));
if(settings->sort_savestates_enable) if(settings->sort_savestates_enable)
strlcpy(global->savestate_dir,orig_savestate_dir,sizeof(global->savestate_dir)); strlcpy(global->dir.savestate, orig_savestate_dir,
sizeof(global->dir.savestate));
/* auto overrides: reload the original config */ /* auto overrides: reload the original config */
if(global->overrides_active) if(global->overrides_active)
@ -583,7 +585,7 @@ static bool event_load_save_files(void)
if (!global) if (!global)
return false; return false;
if (!global->savefiles || global->sram_load_disable) if (!global->savefiles || global->sram.load_disable)
return false; return false;
for (i = 0; i < global->savefiles->size; i++) for (i = 0; i < global->savefiles->size; i++)
@ -602,14 +604,14 @@ static void event_load_auto_state(void)
global_t *global = global_get_ptr(); global_t *global = global_get_ptr();
#ifdef HAVE_NETPLAY #ifdef HAVE_NETPLAY
if (global->netplay_enable && !global->netplay_is_spectate) if (global->netplay.enable && !global->netplay.is_spectate)
return; return;
#endif #endif
if (!settings->savestate_auto_load) if (!settings->savestate_auto_load)
return; return;
fill_pathname_noext(savestate_name_auto, global->savestate_name, fill_pathname_noext(savestate_name_auto, global->name.savestate,
".auto", sizeof(savestate_name_auto)); ".auto", sizeof(savestate_name_auto));
if (!path_file_exists(savestate_name_auto)) if (!path_file_exists(savestate_name_auto))
@ -645,9 +647,9 @@ static void event_set_savestate_auto_index(void)
* /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->savestate_name, fill_pathname_basedir(state_dir, global->name.savestate,
sizeof(state_dir)); sizeof(state_dir));
fill_pathname_base(state_base, global->savestate_name, fill_pathname_base(state_base, global->name.savestate,
sizeof(state_base)); sizeof(state_base));
if (!(dir_list = dir_list_new_special(state_dir, DIR_LIST_PLAIN))) if (!(dir_list = dir_list_new_special(state_dir, DIR_LIST_PLAIN)))
@ -686,16 +688,16 @@ static bool event_init_content(void)
/* No content to be loaded for dummy core, /* No content to be loaded for dummy core,
* just successfully exit. */ * just successfully exit. */
if (global->core_type == CORE_TYPE_DUMMY) if (global->inited.core.type == CORE_TYPE_DUMMY)
return true; return true;
if (!global->libretro_no_content) if (!global->inited.core.no_content)
rarch_fill_pathnames(); rarch_fill_pathnames();
if (!init_content_file()) if (!init_content_file())
return false; return false;
if (global->libretro_no_content) if (global->inited.core.no_content)
return true; return true;
event_set_savestate_auto_index(); event_set_savestate_auto_index();
@ -719,9 +721,11 @@ static bool event_init_core(void)
/* per-core saves: save the original path */ /* per-core saves: save the original path */
if(orig_savefile_dir[0] == '\0') if(orig_savefile_dir[0] == '\0')
strlcpy(orig_savefile_dir,global->savefile_dir,sizeof(orig_savefile_dir)); strlcpy(orig_savefile_dir, global->dir.savefile,
sizeof(orig_savefile_dir));
if(orig_savestate_dir[0] == '\0') if(orig_savestate_dir[0] == '\0')
strlcpy(orig_savestate_dir,global->savestate_dir,sizeof(orig_savestate_dir)); strlcpy(orig_savestate_dir, global->dir.savestate,
sizeof(orig_savestate_dir));
/* auto overrides: apply overrides */ /* auto overrides: apply overrides */
if(settings->auto_overrides_enable) if(settings->auto_overrides_enable)
@ -742,14 +746,14 @@ static bool event_init_core(void)
config_load_remap(); config_load_remap();
/* per-core saves: reset redirection paths */ /* per-core saves: reset redirection paths */
if((settings->sort_savestates_enable || settings->sort_savefiles_enable) && !global->libretro_no_content) if((settings->sort_savestates_enable || settings->sort_savefiles_enable) && !global->inited.core.no_content)
set_paths_redirect(global->basename); set_paths_redirect(global->name.base);
rarch_verify_api_version(); rarch_verify_api_version();
pretro_init(); pretro_init();
global->use_sram = (global->core_type == CORE_TYPE_PLAIN) && global->sram.use = (global->inited.core.type == CORE_TYPE_PLAIN) &&
!global->libretro_no_content; !global->inited.core.no_content;
if (!event_init_content()) if (!event_init_content())
return false; return false;
@ -768,11 +772,11 @@ static bool event_save_auto_state(void)
global_t *global = global_get_ptr(); global_t *global = global_get_ptr();
if (!settings->savestate_auto_save || if (!settings->savestate_auto_save ||
(global->core_type == CORE_TYPE_DUMMY) || (global->inited.core.type == CORE_TYPE_DUMMY) ||
global->libretro_no_content) global->inited.core.no_content)
return false; return false;
fill_pathname_noext(savestate_name_auto, global->savestate_name, fill_pathname_noext(savestate_name_auto, global->name.savestate,
".auto", sizeof(savestate_name_auto)); ".auto", sizeof(savestate_name_auto));
ret = save_state(savestate_name_auto); ret = save_state(savestate_name_auto);
@ -817,8 +821,8 @@ static bool event_save_core_config(void)
if (*settings->menu_config_directory) if (*settings->menu_config_directory)
strlcpy(config_dir, settings->menu_config_directory, strlcpy(config_dir, settings->menu_config_directory,
sizeof(config_dir)); sizeof(config_dir));
else if (*global->config_path) /* Fallback */ else if (*global->path.config) /* Fallback */
fill_pathname_basedir(config_dir, global->config_path, fill_pathname_basedir(config_dir, global->path.config,
sizeof(config_dir)); sizeof(config_dir));
else else
{ {
@ -878,8 +882,8 @@ static bool event_save_core_config(void)
if ((ret = config_save_file(config_path))) if ((ret = config_save_file(config_path)))
{ {
strlcpy(global->config_path, config_path, strlcpy(global->path.config, config_path,
sizeof(global->config_path)); sizeof(global->path.config));
snprintf(msg, sizeof(msg), "Saved new config to \"%s\".", snprintf(msg, sizeof(msg), "Saved new config to \"%s\".",
config_path); config_path);
RARCH_LOG("%s\n", msg); RARCH_LOG("%s\n", msg);
@ -960,12 +964,12 @@ static void event_main_state(unsigned cmd)
if (settings->state_slot > 0) if (settings->state_slot > 0)
snprintf(path, sizeof(path), "%s%d", snprintf(path, sizeof(path), "%s%d",
global->savestate_name, settings->state_slot); global->name.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->savestate_name, "auto", '.', sizeof(path)); global->name.savestate, "auto", '.', sizeof(path));
else else
strlcpy(path, global->savestate_name, sizeof(path)); strlcpy(path, global->name.savestate, sizeof(path));
if (pretro_serialize_size()) if (pretro_serialize_size())
{ {
@ -999,11 +1003,11 @@ static bool event_update_system_info(struct retro_system_info *_info,
libretro_get_system_info(settings->libretro, _info, libretro_get_system_info(settings->libretro, _info,
load_no_content); load_no_content);
#endif #endif
if (!global->core_info) if (!global->core_info.list)
return false; return false;
if (!core_info_list_get_info(global->core_info, if (!core_info_list_get_info(global->core_info.list,
global->core_info_current, settings->libretro)) global->core_info.current, settings->libretro))
return false; return false;
return true; return true;
@ -1052,7 +1056,7 @@ bool event_command(enum event_command cmd)
rarch_environment_cb(RETRO_ENVIRONMENT_SET_LIBRETRO_PATH, rarch_environment_cb(RETRO_ENVIRONMENT_SET_LIBRETRO_PATH,
(void*)settings->libretro); (void*)settings->libretro);
rarch_environment_cb(RETRO_ENVIRONMENT_EXEC, rarch_environment_cb(RETRO_ENVIRONMENT_EXEC,
(void*)global->fullpath); (void*)global->path.fullpath);
event_command(EVENT_CMD_QUIT); event_command(EVENT_CMD_QUIT);
#endif #endif
break; break;
@ -1138,7 +1142,7 @@ bool event_command(enum event_command cmd)
#endif #endif
rarch_main_data_deinit(); rarch_main_data_deinit();
*global->fullpath = '\0'; *global->path.fullpath = '\0';
rarch_main_set_state(RARCH_ACTION_STATE_LOAD_CONTENT); rarch_main_set_state(RARCH_ACTION_STATE_LOAD_CONTENT);
} }
@ -1330,9 +1334,9 @@ bool event_command(enum event_command cmd)
if (!global) if (!global)
break; break;
if (global->core_info) if (global->core_info.list)
core_info_list_free(global->core_info); core_info_list_free(global->core_info.list);
global->core_info = NULL; global->core_info.list = NULL;
break; break;
case EVENT_CMD_DATA_RUNLOOP_FREE: case EVENT_CMD_DATA_RUNLOOP_FREE:
rarch_main_data_free(); rarch_main_data_free();
@ -1341,7 +1345,7 @@ bool event_command(enum event_command cmd)
event_command(EVENT_CMD_CORE_INFO_DEINIT); event_command(EVENT_CMD_CORE_INFO_DEINIT);
if (*settings->libretro_directory) if (*settings->libretro_directory)
global->core_info = core_info_list_new(); global->core_info.list = core_info_list_new();
break; break;
case EVENT_CMD_CORE_DEINIT: case EVENT_CMD_CORE_DEINIT:
{ {
@ -1405,9 +1409,9 @@ bool event_command(enum event_command cmd)
break; break;
case EVENT_CMD_RESTART_RETROARCH: case EVENT_CMD_RESTART_RETROARCH:
#if defined(GEKKO) && defined(HW_RVL) #if defined(GEKKO) && defined(HW_RVL)
fill_pathname_join(global->fullpath, g_defaults.core_dir, fill_pathname_join(global->path.fullpath, g_defaults.dir.core,
SALAMANDER_FILE, SALAMANDER_FILE,
sizeof(global->fullpath)); sizeof(global->path.fullpath));
#endif #endif
if (driver->frontend_ctx && driver->frontend_ctx->set_fork) if (driver->frontend_ctx && driver->frontend_ctx->set_fork)
driver->frontend_ctx->set_fork(true, false); driver->frontend_ctx->set_fork(true, false);
@ -1504,17 +1508,17 @@ bool event_command(enum event_command cmd)
global->savefiles = NULL; global->savefiles = NULL;
break; break;
case EVENT_CMD_SAVEFILES_INIT: case EVENT_CMD_SAVEFILES_INIT:
global->use_sram = global->use_sram && !global->sram_save_disable global->sram.use = global->sram.use && !global->sram.save_disable
#ifdef HAVE_NETPLAY #ifdef HAVE_NETPLAY
&& (!driver->netplay_data || !global->netplay_is_client) && (!driver->netplay_data || !global->netplay.is_client)
#endif #endif
; ;
if (!global->use_sram) if (!global->sram.use)
RARCH_LOG("%s\n", RARCH_LOG("%s\n",
msg_hash_to_str(MSG_SRAM_WILL_NOT_BE_SAVED)); msg_hash_to_str(MSG_SRAM_WILL_NOT_BE_SAVED));
if (global->use_sram) if (global->sram.use)
event_command(EVENT_CMD_AUTOSAVE_INIT); event_command(EVENT_CMD_AUTOSAVE_INIT);
break; break;
case EVENT_CMD_MSG_QUEUE_DEINIT: case EVENT_CMD_MSG_QUEUE_DEINIT:

View File

@ -645,7 +645,7 @@ static void config_set_defaults(void)
{ {
settings->input.joypad_map[i] = i; settings->input.joypad_map[i] = i;
settings->input.analog_dpad_mode[i] = ANALOG_DPAD_NONE; settings->input.analog_dpad_mode[i] = ANALOG_DPAD_NONE;
if (!global->has_set_libretro_device[i]) if (!global->has_set.libretro_device[i])
settings->input.libretro_device[i] = RETRO_DEVICE_JOYPAD; settings->input.libretro_device[i] = RETRO_DEVICE_JOYPAD;
} }
@ -655,21 +655,21 @@ static void config_set_defaults(void)
/* Make sure settings from other configs carry over into defaults /* Make sure settings from other configs carry over into defaults
* for another config. */ * for another config. */
if (!global->has_set_save_path) if (!global->has_set.save_path)
*global->savefile_dir = '\0'; *global->dir.savefile = '\0';
if (!global->has_set_state_path) if (!global->has_set.state_path)
*global->savestate_dir = '\0'; *global->dir.savestate = '\0';
*settings->libretro_info_path = '\0'; *settings->libretro_info_path = '\0';
if (!global->has_set_libretro_directory) if (!global->has_set.libretro_directory)
*settings->libretro_directory = '\0'; *settings->libretro_directory = '\0';
if (!global->has_set_ups_pref) if (!global->has_set.ups_pref)
global->ups_pref = false; global->patch.ups_pref = false;
if (!global->has_set_bps_pref) if (!global->has_set.bps_pref)
global->bps_pref = false; global->patch.bps_pref = false;
if (!global->has_set_ips_pref) if (!global->has_set.ips_pref)
global->ips_pref = false; global->patch.ips_pref = false;
*global->record.output_dir = '\0'; *global->record.output_dir = '\0';
*global->record.config_dir = '\0'; *global->record.config_dir = '\0';
@ -728,117 +728,117 @@ static void config_set_defaults(void)
global->console.sound.mode = SOUND_MODE_NORMAL; global->console.sound.mode = SOUND_MODE_NORMAL;
#endif #endif
if (*g_defaults.wallpapers_dir) if (*g_defaults.dir.wallpapers)
strlcpy(settings->dynamic_wallpapers_directory, strlcpy(settings->dynamic_wallpapers_directory,
g_defaults.wallpapers_dir, sizeof(settings->dynamic_wallpapers_directory)); g_defaults.dir.wallpapers, sizeof(settings->dynamic_wallpapers_directory));
if (*g_defaults.remap_dir) if (*g_defaults.dir.remap)
strlcpy(settings->input_remapping_directory, strlcpy(settings->input_remapping_directory,
g_defaults.remap_dir, sizeof(settings->input_remapping_directory)); g_defaults.dir.remap, sizeof(settings->input_remapping_directory));
if (*g_defaults.extraction_dir) if (*g_defaults.dir.extraction)
strlcpy(settings->extraction_directory, strlcpy(settings->extraction_directory,
g_defaults.extraction_dir, sizeof(settings->extraction_directory)); g_defaults.dir.extraction, sizeof(settings->extraction_directory));
if (*g_defaults.audio_filter_dir) if (*g_defaults.dir.audio_filter)
strlcpy(settings->audio.filter_dir, strlcpy(settings->audio.filter_dir,
g_defaults.audio_filter_dir, sizeof(settings->audio.filter_dir)); g_defaults.dir.audio_filter, sizeof(settings->audio.filter_dir));
if (*g_defaults.video_filter_dir) if (*g_defaults.dir.video_filter)
strlcpy(settings->video.filter_dir, strlcpy(settings->video.filter_dir,
g_defaults.video_filter_dir, sizeof(settings->video.filter_dir)); g_defaults.dir.video_filter, sizeof(settings->video.filter_dir));
if (*g_defaults.assets_dir) if (*g_defaults.dir.assets)
strlcpy(settings->assets_directory, strlcpy(settings->assets_directory,
g_defaults.assets_dir, sizeof(settings->assets_directory)); g_defaults.dir.assets, sizeof(settings->assets_directory));
if (*g_defaults.core_assets_dir) if (*g_defaults.dir.core_assets)
strlcpy(settings->core_assets_directory, strlcpy(settings->core_assets_directory,
g_defaults.core_assets_dir, sizeof(settings->core_assets_directory)); g_defaults.dir.core_assets, sizeof(settings->core_assets_directory));
if (*g_defaults.playlist_dir) if (*g_defaults.dir.playlist)
strlcpy(settings->playlist_directory, strlcpy(settings->playlist_directory,
g_defaults.playlist_dir, sizeof(settings->playlist_directory)); g_defaults.dir.playlist, sizeof(settings->playlist_directory));
if (*g_defaults.core_dir) if (*g_defaults.dir.core)
fill_pathname_expand_special(settings->libretro_directory, fill_pathname_expand_special(settings->libretro_directory,
g_defaults.core_dir, sizeof(settings->libretro_directory)); g_defaults.dir.core, sizeof(settings->libretro_directory));
if (*g_defaults.core_path) if (*g_defaults.path.core)
strlcpy(settings->libretro, g_defaults.core_path, strlcpy(settings->libretro, g_defaults.path.core,
sizeof(settings->libretro)); sizeof(settings->libretro));
if (*g_defaults.database_dir) if (*g_defaults.dir.database)
strlcpy(settings->content_database, g_defaults.database_dir, strlcpy(settings->content_database, g_defaults.dir.database,
sizeof(settings->content_database)); sizeof(settings->content_database));
if (*g_defaults.cursor_dir) if (*g_defaults.dir.cursor)
strlcpy(settings->cursor_directory, g_defaults.cursor_dir, strlcpy(settings->cursor_directory, g_defaults.dir.cursor,
sizeof(settings->cursor_directory)); sizeof(settings->cursor_directory));
if (*g_defaults.cheats_dir) if (*g_defaults.dir.cheats)
strlcpy(settings->cheat_database, g_defaults.cheats_dir, strlcpy(settings->cheat_database, g_defaults.dir.cheats,
sizeof(settings->cheat_database)); sizeof(settings->cheat_database));
if (*g_defaults.core_info_dir) if (*g_defaults.dir.core_info)
fill_pathname_expand_special(settings->libretro_info_path, fill_pathname_expand_special(settings->libretro_info_path,
g_defaults.core_info_dir, sizeof(settings->libretro_info_path)); g_defaults.dir.core_info, sizeof(settings->libretro_info_path));
#ifdef HAVE_OVERLAY #ifdef HAVE_OVERLAY
if (*g_defaults.overlay_dir) if (*g_defaults.dir.overlay)
{ {
fill_pathname_expand_special(global->overlay_dir, fill_pathname_expand_special(global->dir.overlay,
g_defaults.overlay_dir, sizeof(global->overlay_dir)); g_defaults.dir.overlay, sizeof(global->dir.overlay));
#ifdef RARCH_MOBILE #ifdef RARCH_MOBILE
if (!*settings->input.overlay) if (!*settings->input.overlay)
fill_pathname_join(settings->input.overlay, fill_pathname_join(settings->input.overlay,
global->overlay_dir, global->dir.overlay,
"gamepads/retropad/retropad.cfg", "gamepads/retropad/retropad.cfg",
sizeof(settings->input.overlay)); sizeof(settings->input.overlay));
#endif #endif
} }
if (*g_defaults.osk_overlay_dir) if (*g_defaults.dir.osk_overlay)
{ {
fill_pathname_expand_special(global->osk_overlay_dir, fill_pathname_expand_special(global->dir.osk_overlay,
g_defaults.osk_overlay_dir, sizeof(global->osk_overlay_dir)); g_defaults.dir.osk_overlay, sizeof(global->dir.osk_overlay));
#ifdef RARCH_MOBILE #ifdef RARCH_MOBILE
if (!*settings->input.overlay) if (!*settings->input.overlay)
fill_pathname_join(settings->osk.overlay, fill_pathname_join(settings->osk.overlay,
global->osk_overlay_dir, global->dir.osk_overlay,
"overlays/keyboards/US-101/US-101.cfg", "overlays/keyboards/US-101/US-101.cfg",
sizeof(settings->osk.overlay)); sizeof(settings->osk.overlay));
#endif #endif
} }
else else
strlcpy(global->osk_overlay_dir, strlcpy(global->dir.osk_overlay,
global->overlay_dir, sizeof(global->osk_overlay_dir)); global->dir.overlay, sizeof(global->dir.osk_overlay));
#endif #endif
#ifdef HAVE_MENU #ifdef HAVE_MENU
if (*g_defaults.menu_config_dir) if (*g_defaults.dir.menu_config)
strlcpy(settings->menu_config_directory, strlcpy(settings->menu_config_directory,
g_defaults.menu_config_dir, g_defaults.dir.menu_config,
sizeof(settings->menu_config_directory)); sizeof(settings->menu_config_directory));
#endif #endif
if (*g_defaults.shader_dir) if (*g_defaults.dir.shader)
fill_pathname_expand_special(settings->video.shader_dir, fill_pathname_expand_special(settings->video.shader_dir,
g_defaults.shader_dir, sizeof(settings->video.shader_dir)); g_defaults.dir.shader, sizeof(settings->video.shader_dir));
if (*g_defaults.autoconfig_dir) if (*g_defaults.dir.autoconfig)
strlcpy(settings->input.autoconfig_dir, strlcpy(settings->input.autoconfig_dir,
g_defaults.autoconfig_dir, g_defaults.dir.autoconfig,
sizeof(settings->input.autoconfig_dir)); sizeof(settings->input.autoconfig_dir));
if (!global->has_set_state_path && *g_defaults.savestate_dir) if (!global->has_set.state_path && *g_defaults.dir.savestate)
strlcpy(global->savestate_dir, strlcpy(global->dir.savestate,
g_defaults.savestate_dir, sizeof(global->savestate_dir)); g_defaults.dir.savestate, sizeof(global->dir.savestate));
if (!global->has_set_save_path && *g_defaults.sram_dir) if (!global->has_set.save_path && *g_defaults.dir.sram)
strlcpy(global->savefile_dir, strlcpy(global->dir.savefile,
g_defaults.sram_dir, sizeof(global->savefile_dir)); g_defaults.dir.sram, sizeof(global->dir.savefile));
if (*g_defaults.system_dir) if (*g_defaults.dir.system)
strlcpy(settings->system_directory, strlcpy(settings->system_directory,
g_defaults.system_dir, sizeof(settings->system_directory)); g_defaults.dir.system, sizeof(settings->system_directory));
if (*g_defaults.screenshot_dir) if (*g_defaults.dir.screenshot)
strlcpy(settings->screenshot_directory, strlcpy(settings->screenshot_directory,
g_defaults.screenshot_dir, g_defaults.dir.screenshot,
sizeof(settings->screenshot_directory)); sizeof(settings->screenshot_directory));
if (*g_defaults.resampler_dir) if (*g_defaults.dir.resampler)
strlcpy(settings->resampler_directory, strlcpy(settings->resampler_directory,
g_defaults.resampler_dir, g_defaults.dir.resampler,
sizeof(settings->resampler_directory)); sizeof(settings->resampler_directory));
if (*g_defaults.content_history_dir) if (*g_defaults.dir.content_history)
strlcpy(settings->content_history_directory, strlcpy(settings->content_history_directory,
g_defaults.content_history_dir, g_defaults.dir.content_history,
sizeof(settings->content_history_directory)); sizeof(settings->content_history_directory));
if (*g_defaults.config_path) if (*g_defaults.path.config)
fill_pathname_expand_special(global->config_path, fill_pathname_expand_special(global->path.config,
g_defaults.config_path, sizeof(global->config_path)); g_defaults.path.config, sizeof(global->path.config));
settings->config_save_on_exit = config_save_on_exit; settings->config_save_on_exit = config_save_on_exit;
@ -1050,8 +1050,8 @@ static config_file_t *open_default_config_file(void)
if (!conf) if (!conf)
return NULL; return NULL;
strlcpy(global->config_path, conf_path, strlcpy(global->path.config, conf_path,
sizeof(global->config_path)); sizeof(global->path.config));
return conf; return conf;
} }
@ -1199,7 +1199,7 @@ static bool config_load_file(const char *path, bool set_defaults)
if (set_defaults) if (set_defaults)
config_set_defaults(); config_set_defaults();
strlcpy(tmp_append_path, global->append_config_path, strlcpy(tmp_append_path, global->path.append_config,
sizeof(tmp_append_path)); sizeof(tmp_append_path));
extra_path = strtok_r(tmp_append_path, "|", &save); extra_path = strtok_r(tmp_append_path, "|", &save);
@ -1420,24 +1420,24 @@ static bool config_load_file(const char *path, bool set_defaults)
snprintf(buf, sizeof(buf), "input_player%u_analog_dpad_mode", i + 1); snprintf(buf, sizeof(buf), "input_player%u_analog_dpad_mode", i + 1);
CONFIG_GET_INT_BASE(conf, settings, input.analog_dpad_mode[i], buf); CONFIG_GET_INT_BASE(conf, settings, input.analog_dpad_mode[i], buf);
if (!global->has_set_libretro_device[i]) if (!global->has_set.libretro_device[i])
{ {
snprintf(buf, sizeof(buf), "input_libretro_device_p%u", i + 1); snprintf(buf, sizeof(buf), "input_libretro_device_p%u", i + 1);
CONFIG_GET_INT_BASE(conf, settings, input.libretro_device[i], buf); CONFIG_GET_INT_BASE(conf, settings, input.libretro_device[i], buf);
} }
} }
if (!global->has_set_ups_pref) if (!global->has_set.ups_pref)
{ {
CONFIG_GET_BOOL_BASE(conf, global, ups_pref, "ups_pref"); CONFIG_GET_BOOL_BASE(conf, global, patch.ups_pref, "ups_pref");
} }
if (!global->has_set_bps_pref) if (!global->has_set.bps_pref)
{ {
CONFIG_GET_BOOL_BASE(conf, global, bps_pref, "bps_pref"); CONFIG_GET_BOOL_BASE(conf, global, patch.bps_pref, "bps_pref");
} }
if (!global->has_set_ips_pref) if (!global->has_set.ips_pref)
{ {
CONFIG_GET_BOOL_BASE(conf, global, ips_pref, "ips_pref"); CONFIG_GET_BOOL_BASE(conf, global, patch.ips_pref, "ips_pref");
} }
/* Audio settings. */ /* Audio settings. */
@ -1474,9 +1474,9 @@ static bool config_load_file(const char *path, bool set_defaults)
CONFIG_GET_STRING_BASE(conf, settings, input.joypad_driver, "input_joypad_driver"); CONFIG_GET_STRING_BASE(conf, settings, input.joypad_driver, "input_joypad_driver");
CONFIG_GET_STRING_BASE(conf, settings, input.keyboard_layout, "input_keyboard_layout"); CONFIG_GET_STRING_BASE(conf, settings, input.keyboard_layout, "input_keyboard_layout");
if (!global->has_set_libretro) if (!global->has_set.libretro)
config_get_path(conf, "libretro_path", settings->libretro, sizeof(settings->libretro)); config_get_path(conf, "libretro_path", settings->libretro, sizeof(settings->libretro));
if (!global->has_set_libretro_directory) if (!global->has_set.libretro_directory)
config_get_path(conf, "libretro_directory", settings->libretro_directory, sizeof(settings->libretro_directory)); config_get_path(conf, "libretro_directory", settings->libretro_directory, sizeof(settings->libretro_directory));
/* Safe-guard against older behavior. */ /* Safe-guard against older behavior. */
@ -1551,7 +1551,7 @@ static bool config_load_file(const char *path, bool set_defaults)
#endif #endif
CONFIG_GET_INT_BASE(conf, settings, libretro_log_level, "libretro_log_level"); CONFIG_GET_INT_BASE(conf, settings, libretro_log_level, "libretro_log_level");
if (!global->has_set_verbosity) if (!global->has_set.verbosity)
CONFIG_GET_BOOL_BASE(conf, global, verbosity, "log_verbosity"); CONFIG_GET_BOOL_BASE(conf, global, verbosity, "log_verbosity");
CONFIG_GET_BOOL_BASE(conf, global, perfcnt_enable, "perfcnt_enable"); CONFIG_GET_BOOL_BASE(conf, global, perfcnt_enable, "perfcnt_enable");
@ -1562,9 +1562,9 @@ static bool config_load_file(const char *path, bool set_defaults)
sizeof(global->record.config_dir)); sizeof(global->record.config_dir));
#ifdef HAVE_OVERLAY #ifdef HAVE_OVERLAY
config_get_path(conf, "overlay_directory", global->overlay_dir, sizeof(global->overlay_dir)); config_get_path(conf, "overlay_directory", global->dir.overlay, sizeof(global->dir.overlay));
if (!strcmp(global->overlay_dir, "default")) if (!strcmp(global->dir.overlay, "default"))
*global->overlay_dir = '\0'; *global->dir.overlay = '\0';
config_get_path(conf, "input_overlay", settings->input.overlay, sizeof(settings->input.overlay)); config_get_path(conf, "input_overlay", settings->input.overlay, sizeof(settings->input.overlay));
CONFIG_GET_BOOL_BASE(conf, settings, input.overlay_enable, "input_overlay_enable"); CONFIG_GET_BOOL_BASE(conf, settings, input.overlay_enable, "input_overlay_enable");
@ -1573,9 +1573,9 @@ static bool config_load_file(const char *path, bool set_defaults)
CONFIG_GET_FLOAT_BASE(conf, settings, input.overlay_opacity, "input_overlay_opacity"); CONFIG_GET_FLOAT_BASE(conf, settings, input.overlay_opacity, "input_overlay_opacity");
CONFIG_GET_FLOAT_BASE(conf, settings, input.overlay_scale, "input_overlay_scale"); CONFIG_GET_FLOAT_BASE(conf, settings, input.overlay_scale, "input_overlay_scale");
config_get_path(conf, "osk_overlay_directory", global->osk_overlay_dir, sizeof(global->osk_overlay_dir)); config_get_path(conf, "osk_overlay_directory", global->dir.osk_overlay, sizeof(global->dir.osk_overlay));
if (!strcmp(global->osk_overlay_dir, "default")) if (!strcmp(global->dir.osk_overlay, "default"))
*global->osk_overlay_dir = '\0'; *global->dir.osk_overlay = '\0';
config_get_path(conf, "input_osk_overlay", settings->osk.overlay, sizeof(settings->osk.overlay)); config_get_path(conf, "input_osk_overlay", settings->osk.overlay, sizeof(settings->osk.overlay));
CONFIG_GET_BOOL_BASE(conf, settings, osk.enable, "input_osk_overlay_enable"); CONFIG_GET_BOOL_BASE(conf, settings, osk.enable, "input_osk_overlay_enable");
@ -1635,58 +1635,58 @@ static bool config_load_file(const char *path, bool set_defaults)
CONFIG_GET_BOOL_BASE(conf, settings, input.autodetect_enable, "input_autodetect_enable"); CONFIG_GET_BOOL_BASE(conf, settings, input.autodetect_enable, "input_autodetect_enable");
CONFIG_GET_PATH_BASE(conf, settings, input.autoconfig_dir, "joypad_autoconfig_dir"); CONFIG_GET_PATH_BASE(conf, settings, input.autoconfig_dir, "joypad_autoconfig_dir");
if (!global->has_set_username) if (!global->has_set.username)
CONFIG_GET_PATH_BASE(conf, settings, username, "netplay_nickname"); CONFIG_GET_PATH_BASE(conf, settings, username, "netplay_nickname");
CONFIG_GET_INT_BASE(conf, settings, user_language, "user_language"); CONFIG_GET_INT_BASE(conf, settings, user_language, "user_language");
#ifdef HAVE_NETPLAY #ifdef HAVE_NETPLAY
if (!global->has_set_netplay_mode) if (!global->has_set.netplay_mode)
CONFIG_GET_BOOL_BASE(conf, global, netplay_is_spectate, CONFIG_GET_BOOL_BASE(conf, global, netplay.is_spectate,
"netplay_spectator_mode_enable"); "netplay_spectator_mode_enable");
if (!global->has_set_netplay_mode) if (!global->has_set.netplay_mode)
CONFIG_GET_BOOL_BASE(conf, global, netplay_is_client, "netplay_mode"); CONFIG_GET_BOOL_BASE(conf, global, netplay.is_client, "netplay_mode");
if (!global->has_set_netplay_ip_address) if (!global->has_set.netplay_ip_address)
CONFIG_GET_PATH_BASE(conf, global, netplay_server, "netplay_ip_address"); CONFIG_GET_PATH_BASE(conf, global, netplay.server, "netplay_ip_address");
if (!global->has_set_netplay_delay_frames) if (!global->has_set.netplay_delay_frames)
CONFIG_GET_INT_BASE(conf, global, netplay_sync_frames, "netplay_delay_frames"); CONFIG_GET_INT_BASE(conf, global, netplay.sync_frames, "netplay_delay_frames");
if (!global->has_set_netplay_ip_port) if (!global->has_set.netplay_ip_port)
CONFIG_GET_INT_BASE(conf, global, netplay_port, "netplay_ip_port"); CONFIG_GET_INT_BASE(conf, global, netplay.port, "netplay_ip_port");
#endif #endif
CONFIG_GET_BOOL_BASE(conf, settings, config_save_on_exit, "config_save_on_exit"); CONFIG_GET_BOOL_BASE(conf, settings, config_save_on_exit, "config_save_on_exit");
if (!global->has_set_save_path && if (!global->has_set.save_path &&
config_get_path(conf, "savefile_directory", tmp_str, sizeof(tmp_str))) config_get_path(conf, "savefile_directory", tmp_str, sizeof(tmp_str)))
{ {
if (!strcmp(tmp_str, "default")) if (!strcmp(tmp_str, "default"))
strlcpy(global->savefile_dir, g_defaults.sram_dir, strlcpy(global->dir.savefile, g_defaults.dir.sram,
sizeof(global->savefile_dir)); sizeof(global->dir.savefile));
else if (path_is_directory(tmp_str)) else if (path_is_directory(tmp_str))
{ {
strlcpy(global->savefile_dir, tmp_str, strlcpy(global->dir.savefile, tmp_str,
sizeof(global->savefile_dir)); sizeof(global->dir.savefile));
strlcpy(global->savefile_name, tmp_str, strlcpy(global->name.savefile, tmp_str,
sizeof(global->savefile_name)); sizeof(global->name.savefile));
fill_pathname_dir(global->savefile_name, global->basename, fill_pathname_dir(global->name.savefile, global->name.base,
".srm", sizeof(global->savefile_name)); ".srm", sizeof(global->name.savefile));
} }
else else
RARCH_WARN("savefile_directory is not a directory, ignoring ...\n"); RARCH_WARN("savefile_directory is not a directory, ignoring ...\n");
} }
if (!global->has_set_state_path && if (!global->has_set.state_path &&
config_get_path(conf, "savestate_directory", tmp_str, sizeof(tmp_str))) config_get_path(conf, "savestate_directory", tmp_str, sizeof(tmp_str)))
{ {
if (!strcmp(tmp_str, "default")) if (!strcmp(tmp_str, "default"))
strlcpy(global->savestate_dir, g_defaults.savestate_dir, strlcpy(global->dir.savestate, g_defaults.dir.savestate,
sizeof(global->savestate_dir)); sizeof(global->dir.savestate));
else if (path_is_directory(tmp_str)) else if (path_is_directory(tmp_str))
{ {
strlcpy(global->savestate_dir, tmp_str, strlcpy(global->dir.savestate, tmp_str,
sizeof(global->savestate_dir)); sizeof(global->dir.savestate));
strlcpy(global->savestate_name, tmp_str, strlcpy(global->name.savestate, tmp_str,
sizeof(global->savestate_name)); sizeof(global->name.savestate));
fill_pathname_dir(global->savestate_name, global->basename, fill_pathname_dir(global->name.savestate, global->name.base,
".state", sizeof(global->savestate_name)); ".state", sizeof(global->name.savestate));
} }
else else
RARCH_WARN("savestate_directory is not a directory, ignoring ...\n"); RARCH_WARN("savestate_directory is not a directory, ignoring ...\n");
@ -1704,7 +1704,7 @@ static bool config_load_file(const char *path, bool set_defaults)
else else
{ {
fill_pathname_resolve_relative(settings->content_history_path, fill_pathname_resolve_relative(settings->content_history_path,
global->config_path, "content_history.lpl", global->path.config, "content_history.lpl",
sizeof(settings->content_history_path)); sizeof(settings->content_history_path));
} }
} }
@ -1749,12 +1749,12 @@ static void config_load_core_specific(void)
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
global_t *global = global_get_ptr(); global_t *global = global_get_ptr();
*global->core_specific_config_path = '\0'; *global->path.core_specific_config = '\0';
if (!*settings->libretro) if (!*settings->libretro)
return; return;
#ifdef HAVE_DYNAMIC #ifdef HAVE_DYNAMIC
if (global->core_type == CORE_TYPE_DUMMY) if (global->inited.core.type == CORE_TYPE_DUMMY)
return; return;
#endif #endif
@ -1763,34 +1763,34 @@ static void config_load_core_specific(void)
{ {
path_resolve_realpath(settings->menu_config_directory, path_resolve_realpath(settings->menu_config_directory,
sizeof(settings->menu_config_directory)); sizeof(settings->menu_config_directory));
strlcpy(global->core_specific_config_path, strlcpy(global->path.core_specific_config,
settings->menu_config_directory, settings->menu_config_directory,
sizeof(global->core_specific_config_path)); sizeof(global->path.core_specific_config));
} }
else else
#endif #endif
{ {
/* Use original config file's directory as a fallback. */ /* Use original config file's directory as a fallback. */
fill_pathname_basedir(global->core_specific_config_path, fill_pathname_basedir(global->path.core_specific_config,
global->config_path, sizeof(global->core_specific_config_path)); global->path.config, sizeof(global->path.core_specific_config));
} }
fill_pathname_dir(global->core_specific_config_path, settings->libretro, fill_pathname_dir(global->path.core_specific_config, settings->libretro,
".cfg", sizeof(global->core_specific_config_path)); ".cfg", sizeof(global->path.core_specific_config));
if (settings->core_specific_config) if (settings->core_specific_config)
{ {
char tmp[PATH_MAX_LENGTH] = {0}; char tmp[PATH_MAX_LENGTH] = {0};
/* Toggle has_save_path to false so it resets */ /* Toggle has_save_path to false so it resets */
global->has_set_save_path = false; global->has_set.save_path = false;
global->has_set_state_path = false; global->has_set.state_path = false;
strlcpy(tmp, settings->libretro, sizeof(tmp)); strlcpy(tmp, settings->libretro, sizeof(tmp));
RARCH_LOG("Loading core-specific config from: %s.\n", RARCH_LOG("Loading core-specific config from: %s.\n",
global->core_specific_config_path); global->path.core_specific_config);
if (!config_load_file(global->core_specific_config_path, true)) if (!config_load_file(global->path.core_specific_config, true))
RARCH_WARN("Core-specific config not found, reusing last config.\n"); RARCH_WARN("Core-specific config not found, reusing last config.\n");
/* Force some parameters which are implied when using core specific configs. /* Force some parameters which are implied when using core specific configs.
@ -1801,8 +1801,8 @@ static void config_load_core_specific(void)
settings->core_specific_config = true; settings->core_specific_config = true;
/* Reset save paths */ /* Reset save paths */
global->has_set_save_path = true; global->has_set.save_path = true;
global->has_set_state_path = true; global->has_set.state_path = true;
} }
} }
@ -1839,7 +1839,7 @@ bool config_load_override(void)
if (!info->info.library_name || !strcmp(info->info.library_name,"No Core")) if (!info->info.library_name || !strcmp(info->info.library_name,"No Core"))
return false; return false;
RARCH_LOG("Game name: %s\n", global->basename); RARCH_LOG("Game name: %s\n", global->name.base);
RARCH_LOG("Core name: %s\n", info->info.library_name); RARCH_LOG("Core name: %s\n", info->info.library_name);
if (!global || !settings ) if (!global || !settings )
@ -1853,8 +1853,8 @@ bool config_load_override(void)
* fallback to the location of the current configuration file. */ * fallback to the location of the current configuration file. */
if (settings->menu_config_directory[0] != '\0') if (settings->menu_config_directory[0] != '\0')
strlcpy(config_directory, settings->menu_config_directory, PATH_MAX_LENGTH); strlcpy(config_directory, settings->menu_config_directory, PATH_MAX_LENGTH);
else if (global->config_path[0] != '\0') else if (global->path.config[0] != '\0')
fill_pathname_basedir(config_directory, global->config_path, PATH_MAX_LENGTH); fill_pathname_basedir(config_directory, global->path.config, PATH_MAX_LENGTH);
else else
{ {
RARCH_WARN("No config directory set under Settings > Path and retroarch.cfg not found.\n"); RARCH_WARN("No config directory set under Settings > Path and retroarch.cfg not found.\n");
@ -1864,7 +1864,7 @@ bool config_load_override(void)
RARCH_LOG("Config directory: %s\n", config_directory); RARCH_LOG("Config directory: %s\n", config_directory);
core_name = info->info.library_name; core_name = info->info.library_name;
game_name = path_basename(global->basename); game_name = path_basename(global->name.base);
/* Concatenate strings into full paths for core_path, game_path */ /* Concatenate strings into full paths for core_path, game_path */
fill_pathname_join(core_path, config_directory, core_name, PATH_MAX_LENGTH); fill_pathname_join(core_path, config_directory, core_name, PATH_MAX_LENGTH);
@ -1887,7 +1887,7 @@ bool config_load_override(void)
return false; return false;
} }
RARCH_LOG("Core-specific overrides found at %s. Appending.\n", core_path); RARCH_LOG("Core-specific overrides found at %s. Appending.\n", core_path);
strlcpy(global->append_config_path, core_path, sizeof(global->append_config_path)); strlcpy(global->path.append_config, core_path, sizeof(global->path.append_config));
should_append = true; should_append = true;
} }
else else
@ -1902,11 +1902,11 @@ bool config_load_override(void)
RARCH_LOG("Game-specific overrides found at %s. Appending.\n", game_path); RARCH_LOG("Game-specific overrides found at %s. Appending.\n", game_path);
if (should_append) if (should_append)
{ {
strlcat(global->append_config_path, "|", sizeof(global->append_config_path)); strlcat(global->path.append_config, "|", sizeof(global->path.append_config));
strlcat(global->append_config_path, game_path, sizeof(global->append_config_path)); strlcat(global->path.append_config, game_path, sizeof(global->path.append_config));
} }
else else
strlcpy(global->append_config_path, game_path, sizeof(global->append_config_path)); strlcpy(global->path.append_config, game_path, sizeof(global->path.append_config));
should_append = true; should_append = true;
} }
@ -1925,7 +1925,7 @@ bool config_load_override(void)
} }
#ifdef HAVE_NETPLAY #ifdef HAVE_NETPLAY
if (global->netplay_enable) if (global->netplay.enable)
{ {
RARCH_WARN("Can't use overrides in conjunction with netplay, disabling overrides\n"); RARCH_WARN("Can't use overrides in conjunction with netplay, disabling overrides\n");
return false; return false;
@ -1936,10 +1936,10 @@ bool config_load_override(void)
strlcpy(buf,settings->libretro,sizeof(buf)); strlcpy(buf,settings->libretro,sizeof(buf));
/* Toggle has_save_path to false so it resets */ /* Toggle has_save_path to false so it resets */
global->has_set_save_path = false; global->has_set.save_path = false;
global->has_set_state_path = false; global->has_set.state_path = false;
if (config_load_file(global->config_path, false)) if (config_load_file(global->path.config, false))
{ {
/* Restore the libretro_path we're using /* Restore the libretro_path we're using
* since it will be overwritten by the override when reloading. */ * since it will be overwritten by the override when reloading. */
@ -1947,8 +1947,8 @@ bool config_load_override(void)
rarch_main_msg_queue_push("Configuration override loaded", 1, 100, true); rarch_main_msg_queue_push("Configuration override loaded", 1, 100, true);
/* Reset save paths */ /* Reset save paths */
global->has_set_save_path = true; global->has_set.save_path = true;
global->has_set_state_path = true; global->has_set.state_path = true;
return true; return true;
} }
} }
@ -1971,19 +1971,19 @@ bool config_load_override(void)
if (!global) if (!global)
return false; return false;
*global->append_config_path = '\0'; *global->path.append_config = '\0';
/* Toggle has_save_path to false so it resets */ /* Toggle has_save_path to false so it resets */
global->has_set_save_path = false; global->has_set.save_path = false;
global->has_set_state_path = false; global->has_set.state_path = false;
if (config_load_file(global->config_path, false)) if (config_load_file(global->path.config, false))
{ {
RARCH_LOG("Configuration overrides unloaded, original configuration reset\n"); RARCH_LOG("Configuration overrides unloaded, original configuration reset\n");
/* Reset save paths */ /* Reset save paths */
global->has_set_save_path = true; global->has_set.save_path = true;
global->has_set_state_path = true; global->has_set.state_path = true;
return true; return true;
} }
@ -2020,7 +2020,7 @@ bool config_load_remap(void)
if (!info->info.library_name || !strcmp(info->info.library_name,"No Core")) if (!info->info.library_name || !strcmp(info->info.library_name,"No Core"))
return false; return false;
RARCH_LOG("Game name: %s\n", global->basename); RARCH_LOG("Game name: %s\n", global->name.base);
RARCH_LOG("Core name: %s\n", info->info.library_name); RARCH_LOG("Core name: %s\n", info->info.library_name);
/* Remap directory: remap_directory. /* Remap directory: remap_directory.
@ -2035,7 +2035,7 @@ bool config_load_remap(void)
RARCH_LOG("Remap directory: %s\n", remap_directory); RARCH_LOG("Remap directory: %s\n", remap_directory);
core_name = info->info.library_name; core_name = info->info.library_name;
game_name = path_basename(global->basename); game_name = path_basename(global->name.base);
/* Concatenate strings into full paths for core_path, game_path */ /* Concatenate strings into full paths for core_path, game_path */
fill_pathname_join(core_path, remap_directory, core_name, PATH_MAX_LENGTH); fill_pathname_join(core_path, remap_directory, core_name, PATH_MAX_LENGTH);
@ -2096,25 +2096,25 @@ bool config_load_remap(void)
static void parse_config_file(void) static void parse_config_file(void)
{ {
global_t *global = global_get_ptr(); global_t *global = global_get_ptr();
bool ret = config_load_file((*global->config_path) bool ret = config_load_file((*global->path.config)
? global->config_path : NULL, false); ? global->path.config : NULL, false);
if (*global->config_path) if (*global->path.config)
{ {
RARCH_LOG("Loading config from: %s.\n", global->config_path); RARCH_LOG("Loading config from: %s.\n", global->path.config);
} }
else else
{ {
RARCH_LOG("Loading default config.\n"); RARCH_LOG("Loading default config.\n");
if (*global->config_path) if (*global->path.config)
RARCH_LOG("Found default config: %s.\n", global->config_path); RARCH_LOG("Found default config: %s.\n", global->path.config);
} }
if (ret) if (ret)
return; return;
RARCH_ERR("Couldn't find config at path: \"%s\"\n", RARCH_ERR("Couldn't find config at path: \"%s\"\n",
global->config_path); global->path.config);
} }
@ -2287,12 +2287,12 @@ void config_load(void)
global_t *global = global_get_ptr(); global_t *global = global_get_ptr();
/* Flush out per-core configs before loading a new config. */ /* Flush out per-core configs before loading a new config. */
if (*global->core_specific_config_path && if (*global->path.core_specific_config &&
settings->config_save_on_exit && settings->core_specific_config) settings->config_save_on_exit && settings->core_specific_config)
config_save_file(global->core_specific_config_path); config_save_file(global->path.core_specific_config);
/* Flush out some states that could have been set by core environment variables */ /* Flush out some states that could have been set by core environment variables */
global->has_set_input_descriptors = false; global->has_set.input_descriptors = false;
if (!global->block_config_read) if (!global->block_config_read)
{ {
@ -2562,12 +2562,12 @@ bool config_save_file(const char *path)
config_set_float(conf, "video_font_size", settings->video.font_size); config_set_float(conf, "video_font_size", settings->video.font_size);
config_set_bool(conf, "video_font_enable", settings->video.font_enable); config_set_bool(conf, "video_font_enable", settings->video.font_enable);
if (!global->has_set_ups_pref) if (!global->has_set.ups_pref)
config_set_bool(conf, "ups_pref", global->ups_pref); config_set_bool(conf, "ups_pref", global->patch.ups_pref);
if (!global->has_set_bps_pref) if (!global->has_set.bps_pref)
config_set_bool(conf, "bps_pref", global->bps_pref); config_set_bool(conf, "bps_pref", global->patch.bps_pref);
if (!global->has_set_ips_pref) if (!global->has_set.ips_pref)
config_set_bool(conf, "ips_pref", global->ips_pref); config_set_bool(conf, "ips_pref", global->patch.ips_pref);
config_set_path(conf, "system_directory", config_set_path(conf, "system_directory",
*settings->system_directory ? *settings->system_directory ?
@ -2582,9 +2582,9 @@ bool config_save_file(const char *path)
settings->resampler_directory); settings->resampler_directory);
config_set_string(conf, "audio_resampler", settings->audio.resampler); config_set_string(conf, "audio_resampler", settings->audio.resampler);
config_set_path(conf, "savefile_directory", config_set_path(conf, "savefile_directory",
*global->savefile_dir ? global->savefile_dir : "default"); *global->dir.savefile ? global->dir.savefile : "default");
config_set_path(conf, "savestate_directory", config_set_path(conf, "savestate_directory",
*global->savestate_dir ? global->savestate_dir : "default"); *global->dir.savestate ? global->dir.savestate : "default");
config_set_path(conf, "video_shader_dir", config_set_path(conf, "video_shader_dir",
*settings->video.shader_dir ? *settings->video.shader_dir ?
settings->video.shader_dir : "default"); settings->video.shader_dir : "default");
@ -2647,7 +2647,7 @@ bool config_save_file(const char *path)
#ifdef HAVE_OVERLAY #ifdef HAVE_OVERLAY
config_set_path(conf, "overlay_directory", config_set_path(conf, "overlay_directory",
*global->overlay_dir ? global->overlay_dir : "default"); *global->dir.overlay ? global->dir.overlay : "default");
config_set_path(conf, "input_overlay", settings->input.overlay); config_set_path(conf, "input_overlay", settings->input.overlay);
config_set_bool(conf, "input_overlay_enable", settings->input.overlay_enable); config_set_bool(conf, "input_overlay_enable", settings->input.overlay_enable);
config_set_bool(conf, "input_overlay_enable_autopreferred", settings->input.overlay_enable_autopreferred); config_set_bool(conf, "input_overlay_enable_autopreferred", settings->input.overlay_enable_autopreferred);
@ -2658,7 +2658,7 @@ bool config_save_file(const char *path)
settings->input.overlay_scale); settings->input.overlay_scale);
config_set_path(conf, "osk_overlay_directory", config_set_path(conf, "osk_overlay_directory",
*global->osk_overlay_dir ? global->osk_overlay_dir : "default"); *global->dir.osk_overlay ? global->dir.osk_overlay : "default");
config_set_path(conf, "input_osk_overlay", settings->osk.overlay); config_set_path(conf, "input_osk_overlay", settings->osk.overlay);
config_set_bool(conf, "input_osk_overlay_enable", settings->osk.enable); config_set_bool(conf, "input_osk_overlay_enable", settings->osk.enable);
#endif #endif
@ -2720,11 +2720,11 @@ bool config_save_file(const char *path)
#ifdef HAVE_NETPLAY #ifdef HAVE_NETPLAY
config_set_bool(conf, "netplay_spectator_mode_enable", config_set_bool(conf, "netplay_spectator_mode_enable",
global->netplay_is_spectate); global->netplay.is_spectate);
config_set_bool(conf, "netplay_mode", global->netplay_is_client); config_set_bool(conf, "netplay_mode", global->netplay.is_client);
config_set_string(conf, "netplay_ip_address", global->netplay_server); config_set_string(conf, "netplay_ip_address", global->netplay.server);
config_set_int(conf, "netplay_ip_port", global->netplay_port); config_set_int(conf, "netplay_ip_port", global->netplay.port);
config_set_int(conf, "netplay_delay_frames", global->netplay_sync_frames); config_set_int(conf, "netplay_delay_frames", global->netplay.sync_frames);
#endif #endif
config_set_string(conf, "netplay_nickname", settings->username); config_set_string(conf, "netplay_nickname", settings->username);
config_set_int(conf, "user_language", settings->user_language); config_set_int(conf, "user_language", settings->user_language);

View File

@ -73,7 +73,7 @@ static bool read_content_file(unsigned i, const char *path, void **buf,
return true; return true;
/* Attempt to apply a patch. */ /* Attempt to apply a patch. */
if (!global->block_patch) if (!global->patch.block_patch)
patch_content(&ret_buf, length); patch_content(&ret_buf, length);
#ifdef HAVE_ZLIB #ifdef HAVE_ZLIB
@ -610,7 +610,7 @@ bool init_content_file(void)
attr.i |= system->info.need_fullpath << 1; attr.i |= system->info.need_fullpath << 1;
attr.i |= (!system->no_content) << 2; attr.i |= (!system->no_content) << 2;
string_list_append(content, string_list_append(content,
(global->libretro_no_content && settings->core.set_supports_no_game_enable) ? "" : global->fullpath, attr); (global->inited.core.no_content && settings->core.set_supports_no_game_enable) ? "" : global->path.fullpath, attr);
} }
#ifdef HAVE_ZLIB #ifdef HAVE_ZLIB
@ -655,7 +655,7 @@ bool init_content_file(void)
ret = load_content(special, content); ret = load_content(special, content);
error: error:
global->content_is_init = (ret) ? true : false; global->inited.content = (ret) ? true : false;
if (content) if (content)
string_list_free(content); string_list_free(content);

View File

@ -39,7 +39,7 @@ struct string_list *dir_list_new_special(const char *input_dir, enum dir_list_ty
break; break;
case DIR_LIST_CORE_INFO: case DIR_LIST_CORE_INFO:
dir = input_dir; dir = input_dir;
exts = (global->core_info) ? core_info_list_get_all_extensions(global->core_info) : NULL; exts = (global->core_info.list) ? core_info_list_get_all_extensions(global->core_info.list) : NULL;
break; break;
case DIR_LIST_SHADERS: case DIR_LIST_SHADERS:
dir = settings->video.shader_dir; dir = settings->video.shader_dir;

View File

@ -704,9 +704,9 @@ bool rarch_environment_cb(unsigned cmd, void *data)
char buf[PATH_MAX_LENGTH] = {0}; char buf[PATH_MAX_LENGTH] = {0};
const char *options_path = settings->core_options_path; const char *options_path = settings->core_options_path;
if (!*options_path && *global->config_path) if (!*options_path && *global->path.config)
{ {
fill_pathname_resolve_relative(buf, global->config_path, fill_pathname_resolve_relative(buf, global->path.config,
"retroarch-core-options.cfg", sizeof(buf)); "retroarch-core-options.cfg", sizeof(buf));
options_path = buf; options_path = buf;
} }
@ -754,8 +754,8 @@ bool rarch_environment_cb(unsigned cmd, void *data)
case RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY: case RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY:
if (!settings->system_directory || settings->system_directory[0] == '\0') if (!settings->system_directory || settings->system_directory[0] == '\0')
{ {
RARCH_WARN("SYSTEM DIR is empty, fill assume CONTENT DIR %s\n",global->fullpath); RARCH_WARN("SYSTEM DIR is empty, fill assume CONTENT DIR %s\n",global->path.fullpath);
fill_pathname_basedir(buf, global->fullpath, fill_pathname_basedir(buf, global->path.fullpath,
sizeof(buf)); sizeof(buf));
} }
@ -767,10 +767,10 @@ bool rarch_environment_cb(unsigned cmd, void *data)
break; break;
case RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY: case RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY:
*(const char**)data = *global->savefile_dir ? *(const char**)data = *global->dir.savefile ?
global->savefile_dir : NULL; global->dir.savefile : NULL;
RARCH_LOG("Environ SAVE_DIRECTORY: \"%s\".\n", RARCH_LOG("Environ SAVE_DIRECTORY: \"%s\".\n",
global->savefile_dir); global->dir.savefile);
break; break;
case RETRO_ENVIRONMENT_GET_USERNAME: case RETRO_ENVIRONMENT_GET_USERNAME:
@ -895,7 +895,7 @@ bool rarch_environment_cb(unsigned cmd, void *data)
} }
} }
global->has_set_input_descriptors = true; global->has_set.input_descriptors = true;
break; break;
} }
@ -1022,7 +1022,7 @@ bool rarch_environment_cb(unsigned cmd, void *data)
return false; return false;
#ifdef HAVE_NETPLAY #ifdef HAVE_NETPLAY
if (global->netplay_enable) if (global->netplay.enable)
return false; return false;
#endif #endif
@ -1041,7 +1041,7 @@ bool rarch_environment_cb(unsigned cmd, void *data)
#ifdef HAVE_NETPLAY #ifdef HAVE_NETPLAY
/* retro_run() will be called in very strange and /* retro_run() will be called in very strange and
* mysterious ways, have to disable it. */ * mysterious ways, have to disable it. */
if (global->netplay_enable) if (global->netplay.enable)
return false; return false;
#endif #endif
@ -1261,11 +1261,10 @@ bool rarch_environment_cb(unsigned cmd, void *data)
case RETRO_ENVIRONMENT_EXEC: case RETRO_ENVIRONMENT_EXEC:
case RETRO_ENVIRONMENT_EXEC_ESCAPE: case RETRO_ENVIRONMENT_EXEC_ESCAPE:
*global->path.fullpath = '\0';
if (data) if (data)
strlcpy(global->fullpath, (const char*)data, strlcpy(global->path.fullpath, (const char*)data,
sizeof(global->fullpath)); sizeof(global->path.fullpath));
else
*global->fullpath = '\0';
#if defined(RARCH_CONSOLE) #if defined(RARCH_CONSOLE)
if (driver->frontend_ctx && driver->frontend_ctx->set_fork) if (driver->frontend_ctx && driver->frontend_ctx->set_fork)

View File

@ -744,93 +744,91 @@ static void frontend_android_get_environment_settings(int *argc,
RARCH_LOG("Application location: [%s].\n", app_dir); RARCH_LOG("Application location: [%s].\n", app_dir);
if (args && *app_dir) if (args && *app_dir)
{ {
fill_pathname_join(g_defaults.assets_dir, app_dir, fill_pathname_join(g_defaults.dir.assets, app_dir,
"assets", sizeof(g_defaults.savestate_dir)); "assets", sizeof(g_defaults.dir.assets));
fill_pathname_join(g_defaults.extraction_dir, app_dir, fill_pathname_join(g_defaults.dir.extraction, app_dir,
"tmp", sizeof(g_defaults.extraction_dir)); "tmp", sizeof(g_defaults.dir.extraction));
fill_pathname_join(g_defaults.shader_dir, app_dir, fill_pathname_join(g_defaults.dir.shader, app_dir,
"shaders", sizeof(g_defaults.shader_dir)); "shaders", sizeof(g_defaults.dir.shader));
fill_pathname_join(g_defaults.overlay_dir, app_dir, fill_pathname_join(g_defaults.dir.overlay, app_dir,
"overlays", sizeof(g_defaults.overlay_dir)); "overlays", sizeof(g_defaults.dir.overlay));
fill_pathname_join(g_defaults.core_dir, app_dir, fill_pathname_join(g_defaults.dir.core, app_dir,
"cores", sizeof(g_defaults.core_dir)); "cores", sizeof(g_defaults.dir.core));
fill_pathname_join(g_defaults.core_info_dir, fill_pathname_join(g_defaults.dir.core_info,
app_dir, "info", sizeof(g_defaults.core_info_dir)); app_dir, "info", sizeof(g_defaults.dir.core_info));
fill_pathname_join(g_defaults.autoconfig_dir, fill_pathname_join(g_defaults.dir.autoconfig,
app_dir, "autoconfig", sizeof(g_defaults.autoconfig_dir)); app_dir, "autoconfig", sizeof(g_defaults.dir.autoconfig));
fill_pathname_join(g_defaults.audio_filter_dir, fill_pathname_join(g_defaults.dir.audio_filter,
app_dir, "audio_filters", sizeof(g_defaults.audio_filter_dir)); app_dir, "audio_filters", sizeof(g_defaults.dir.audio_filter));
fill_pathname_join(g_defaults.video_filter_dir, fill_pathname_join(g_defaults.dir.video_filter,
app_dir, "video_filters", sizeof(g_defaults.video_filter_dir)); app_dir, "video_filters", sizeof(g_defaults.dir.video_filter));
strlcpy(g_defaults.content_history_dir, strlcpy(g_defaults.dir.content_history,
app_dir, sizeof(g_defaults.content_history_dir)); app_dir, sizeof(g_defaults.dir.content_history));
fill_pathname_join(g_defaults.database_dir, fill_pathname_join(g_defaults.dir.database,
app_dir, "database/rdb", sizeof(g_defaults.database_dir)); app_dir, "database/rdb", sizeof(g_defaults.dir.database));
fill_pathname_join(g_defaults.cursor_dir, fill_pathname_join(g_defaults.dir.cursor,
app_dir, "database/cursors", sizeof(g_defaults.cursor_dir)); app_dir, "database/cursors", sizeof(g_defaults.dir.cursor));
fill_pathname_join(g_defaults.cheats_dir, fill_pathname_join(g_defaults.dir.cheats,
app_dir, "cheats", sizeof(g_defaults.cheats_dir)); app_dir, "cheats", sizeof(g_defaults.dir.cheats));
fill_pathname_join(g_defaults.playlist_dir, fill_pathname_join(g_defaults.dir.playlist,
app_dir, "playlists", sizeof(g_defaults.playlist_dir)); app_dir, "playlists", sizeof(g_defaults.dir.playlist));
fill_pathname_join(g_defaults.remap_dir, fill_pathname_join(g_defaults.dir.remap,
app_dir, "remaps", sizeof(g_defaults.remap_dir)); app_dir, "remaps", sizeof(g_defaults.dir.remap));
fill_pathname_join(g_defaults.wallpapers_dir, fill_pathname_join(g_defaults.dir.wallpapers,
app_dir, "wallpapers", sizeof(g_defaults.wallpapers_dir)); app_dir, "wallpapers", sizeof(g_defaults.dir.wallpapers));
if(*downloads_dir && test_permissions(downloads_dir)) if(*downloads_dir && test_permissions(downloads_dir))
{ {
fill_pathname_join(g_defaults.core_assets_dir, fill_pathname_join(g_defaults.dir.core_assets,
downloads_dir, "", sizeof(g_defaults.core_assets_dir)); downloads_dir, "", sizeof(g_defaults.dir.core_assets));
} }
else else
{ {
fill_pathname_join(g_defaults.core_assets_dir, fill_pathname_join(g_defaults.dir.core_assets,
app_dir, "downloads", sizeof(g_defaults.core_assets_dir)); app_dir, "downloads", sizeof(g_defaults.dir.core_assets));
path_mkdir(g_defaults.core_assets_dir); path_mkdir(g_defaults.dir.core_assets);
} }
RARCH_LOG("Default download folder: [%s]", g_defaults.core_assets_dir); RARCH_LOG("Default download folder: [%s]", g_defaults.dir.core_assets);
if(*screenshot_dir && test_permissions(screenshot_dir)) if(*screenshot_dir && test_permissions(screenshot_dir))
{ {
fill_pathname_join(g_defaults.screenshot_dir, fill_pathname_join(g_defaults.dir.screenshot,
screenshot_dir, "", sizeof(g_defaults.screenshot_dir)); screenshot_dir, "", sizeof(g_defaults.dir.screenshot));
} }
else else
{ {
fill_pathname_join(g_defaults.screenshot_dir, fill_pathname_join(g_defaults.dir.screenshot,
app_dir, "screenshots", sizeof(g_defaults.screenshot_dir)); app_dir, "screenshots", sizeof(g_defaults.dir.screenshot));
path_mkdir(g_defaults.screenshot_dir); path_mkdir(g_defaults.dir.screenshot);
} }
RARCH_LOG("Default screenshot folder: [%s]", g_defaults.screenshot_dir); RARCH_LOG("Default screenshot folder: [%s]", g_defaults.dir.screenshot);
switch (perms) switch (perms)
{ {
case SDCARD_EXT_DIR_WRITABLE: case SDCARD_EXT_DIR_WRITABLE:
fill_pathname_join(g_defaults.sram_dir, fill_pathname_join(g_defaults.dir.sram,
ext_dir, "saves", sizeof(g_defaults.sram_dir)); ext_dir, "saves", sizeof(g_defaults.dir.sram));
path_mkdir(g_defaults.sram_dir); path_mkdir(g_defaults.dir.sram);
fill_pathname_join(g_defaults.savestate_dir, fill_pathname_join(g_defaults.dir.savestate,
ext_dir, "states", sizeof(g_defaults.savestate_dir)); ext_dir, "states", sizeof(g_defaults.dir.savestate));
path_mkdir(g_defaults.savestate_dir); path_mkdir(g_defaults.dir.savestate);
fill_pathname_join(g_defaults.system_dir, fill_pathname_join(g_defaults.dir.system,
ext_dir, "system", sizeof(g_defaults.system_dir)); ext_dir, "system", sizeof(g_defaults.dir.system));
path_mkdir(g_defaults.system_dir); path_mkdir(g_defaults.dir.system);
break; break;
case SDCARD_NOT_WRITABLE: case SDCARD_NOT_WRITABLE:
fill_pathname_join(g_defaults.sram_dir, fill_pathname_join(g_defaults.dir.sram,
app_dir, "saves", sizeof(g_defaults.sram_dir)); app_dir, "saves", sizeof(g_defaults.dir.sram));
path_mkdir(g_defaults.sram_dir); path_mkdir(g_defaults.dir.sram);
fill_pathname_join(g_defaults.dir.savestate,
fill_pathname_join(g_defaults.savestate_dir, app_dir, "states", sizeof(g_defaults.dir.savestate));
app_dir, "states", sizeof(g_defaults.savestate_dir)); path_mkdir(g_defaults.dir.savestate);
path_mkdir(g_defaults.savestate_dir); fill_pathname_join(g_defaults.dir.system,
app_dir, "system", sizeof(g_defaults.dir.system));
fill_pathname_join(g_defaults.system_dir, path_mkdir(g_defaults.dir.system);
app_dir, "system", sizeof(g_defaults.system_dir));
path_mkdir(g_defaults.system_dir);
break; break;
case SDCARD_ROOT_WRITABLE: case SDCARD_ROOT_WRITABLE:
default: default:
@ -864,9 +862,9 @@ static void frontend_android_get_environment_settings(int *argc,
ext_dir, "system", sizeof(buf)); ext_dir, "system", sizeof(buf));
path_mkdir(buf); path_mkdir(buf);
RARCH_LOG("Default savefile folder: [%s]", g_defaults.sram_dir); RARCH_LOG("Default savefile folder: [%s]", g_defaults.dir.sram);
RARCH_LOG("Default savestate folder: [%s]", g_defaults.savestate_dir); RARCH_LOG("Default savestate folder: [%s]", g_defaults.dir.savestate);
RARCH_LOG("Default system folder: [%s]", g_defaults.system_dir); RARCH_LOG("Default system folder: [%s]", g_defaults.dir.system);
} }
} }
} }

View File

@ -56,27 +56,27 @@ static void frontend_ctr_get_environment_settings(int *argc, char *argv[],
#endif #endif
#endif #endif
fill_pathname_basedir(g_defaults.port_dir, elf_path_cst, sizeof(g_defaults.port_dir)); fill_pathname_basedir(g_defaults.dir.port, elf_path_cst, sizeof(g_defaults.dir.port));
RARCH_LOG("port dir: [%s]\n", g_defaults.port_dir); RARCH_LOG("port dir: [%s]\n", g_defaults.dir.port);
fill_pathname_join(g_defaults.core_assets_dir, g_defaults.port_dir, fill_pathname_join(g_defaults.dir.core_assets, g_defaults.dir.port,
"downloads", sizeof(g_defaults.core_assets_dir)); "downloads", sizeof(g_defaults.dir.core_assets));
fill_pathname_join(g_defaults.assets_dir, g_defaults.port_dir, fill_pathname_join(g_defaults.dir.assets, g_defaults.dir.port,
"media", sizeof(g_defaults.assets_dir)); "media", sizeof(g_defaults.dir.assets));
fill_pathname_join(g_defaults.core_dir, g_defaults.port_dir, fill_pathname_join(g_defaults.dir.core, g_defaults.dir.port,
"cores", sizeof(g_defaults.core_dir)); "cores", sizeof(g_defaults.dir.core));
fill_pathname_join(g_defaults.core_info_dir, g_defaults.port_dir, fill_pathname_join(g_defaults.dir.core_info, g_defaults.dir.port,
"cores", sizeof(g_defaults.core_info_dir)); "cores", sizeof(g_defaults.dir.core_info));
fill_pathname_join(g_defaults.savestate_dir, g_defaults.core_dir, fill_pathname_join(g_defaults.dir.savestate, g_defaults.dir.core,
"savestates", sizeof(g_defaults.savestate_dir)); "savestates", sizeof(g_defaults.dir.savestate));
fill_pathname_join(g_defaults.sram_dir, g_defaults.core_dir, fill_pathname_join(g_defaults.dir.sram, g_defaults.dir.core,
"savefiles", sizeof(g_defaults.sram_dir)); "savefiles", sizeof(g_defaults.dir.sram));
fill_pathname_join(g_defaults.system_dir, g_defaults.core_dir, fill_pathname_join(g_defaults.dir.system, g_defaults.dir.core,
"system", sizeof(g_defaults.system_dir)); "system", sizeof(g_defaults.dir.system));
fill_pathname_join(g_defaults.playlist_dir, g_defaults.core_dir, fill_pathname_join(g_defaults.dir.playlist, g_defaults.dir.core,
"playlists", sizeof(g_defaults.playlist_dir)); "playlists", sizeof(g_defaults.dir.playlist));
fill_pathname_join(g_defaults.config_path, g_defaults.port_dir, fill_pathname_join(g_defaults.path.config, g_defaults.dir.port,
"retroarch.cfg", sizeof(g_defaults.config_path)); "retroarch.cfg", sizeof(g_defaults.path.config));
#ifndef IS_SALAMANDER #ifndef IS_SALAMANDER
#if 0 #if 0

View File

@ -337,52 +337,52 @@ static void frontend_darwin_get_environment_settings(int *argc, char *argv[],
#ifdef OSX #ifdef OSX
strlcat(home_dir_buf, "/RetroArch", sizeof(home_dir_buf)); strlcat(home_dir_buf, "/RetroArch", sizeof(home_dir_buf));
#endif #endif
fill_pathname_join(g_defaults.shader_dir, home_dir_buf, "shaders_glsl", sizeof(g_defaults.shader_dir)); fill_pathname_join(g_defaults.dir.shader, home_dir_buf, "shaders_glsl", sizeof(g_defaults.dir.shader));
fill_pathname_join(g_defaults.core_dir, home_dir_buf, "cores", sizeof(g_defaults.core_dir)); fill_pathname_join(g_defaults.dir.core, home_dir_buf, "cores", sizeof(g_defaults.dir.core));
fill_pathname_join(g_defaults.core_info_dir, home_dir_buf, "info", sizeof(g_defaults.core_info_dir)); fill_pathname_join(g_defaults.dir.core_info, home_dir_buf, "info", sizeof(g_defaults.dir.core_info));
fill_pathname_join(g_defaults.overlay_dir, home_dir_buf, "overlays", sizeof(g_defaults.overlay_dir)); fill_pathname_join(g_defaults.dir.overlay, home_dir_buf, "overlays", sizeof(g_defaults.dir.overlay));
fill_pathname_join(g_defaults.autoconfig_dir, home_dir_buf, "autoconfig", sizeof(g_defaults.autoconfig_dir)); fill_pathname_join(g_defaults.dir.autoconfig, home_dir_buf, "autoconfig", sizeof(g_defaults.dir.autoconfig));
fill_pathname_join(g_defaults.core_assets_dir, home_dir_buf, "downloads", sizeof(g_defaults.core_assets_dir)); fill_pathname_join(g_defaults.dir.core_assets, home_dir_buf, "downloads", sizeof(g_defaults.dir.core_assets));
fill_pathname_join(g_defaults.assets_dir, home_dir_buf, "assets", sizeof(g_defaults.assets_dir)); fill_pathname_join(g_defaults.dir.assets, home_dir_buf, "assets", sizeof(g_defaults.dir.assets));
fill_pathname_join(g_defaults.system_dir, home_dir_buf, "system", sizeof(g_defaults.system_dir)); fill_pathname_join(g_defaults.dir.system, home_dir_buf, "system", sizeof(g_defaults.dir.system));
fill_pathname_join(g_defaults.menu_config_dir, home_dir_buf, "configs", sizeof(g_defaults.menu_config_dir)); fill_pathname_join(g_defaults.dir.menu_config, home_dir_buf, "configs", sizeof(g_defaults.dir.menu_config));
fill_pathname_join(g_defaults.config_path, g_defaults.menu_config_dir, "retroarch.cfg", sizeof(g_defaults.config_path)); fill_pathname_join(g_defaults.path.config, g_defaults.dir.menu_config, "retroarch.cfg", sizeof(g_defaults.path.config));
fill_pathname_join(g_defaults.database_dir, home_dir_buf, "rdb", sizeof(g_defaults.database_dir)); fill_pathname_join(g_defaults.dir.database, home_dir_buf, "rdb", sizeof(g_defaults.dir.database));
fill_pathname_join(g_defaults.cursor_dir, home_dir_buf, "cursors", sizeof(g_defaults.cursor_dir)); fill_pathname_join(g_defaults.dir.cursor, home_dir_buf, "cursors", sizeof(g_defaults.dir.cursor));
fill_pathname_join(g_defaults.cheats_dir, home_dir_buf, "cht", sizeof(g_defaults.cheats_dir)); fill_pathname_join(g_defaults.dir.cheats, home_dir_buf, "cht", sizeof(g_defaults.dir.cheats));
fill_pathname_join(g_defaults.sram_dir, home_dir_buf, "saves", sizeof(g_defaults.sram_dir)); fill_pathname_join(g_defaults.dir.sram, home_dir_buf, "saves", sizeof(g_defaults.dir.sram));
fill_pathname_join(g_defaults.savestate_dir, home_dir_buf, "states", sizeof(g_defaults.savestate_dir)); fill_pathname_join(g_defaults.dir.savestate, home_dir_buf, "states", sizeof(g_defaults.dir.savestate));
fill_pathname_join(g_defaults.remap_dir, home_dir_buf, "remaps", sizeof(g_defaults.remap_dir)); fill_pathname_join(g_defaults.dir.remap, home_dir_buf, "remaps", sizeof(g_defaults.dir.remap));
#if defined(OSX) #if defined(OSX)
#ifdef HAVE_CG #ifdef HAVE_CG
fill_pathname_join(g_defaults.shader_dir, home_dir_buf, "shaders_cg", sizeof(g_defaults.shader_dir)); fill_pathname_join(g_defaults.dir.shader, home_dir_buf, "shaders_cg", sizeof(g_defaults.dir.shader));
#endif #endif
fill_pathname_join(g_defaults.audio_filter_dir, home_dir_buf, "audio_filters", sizeof(g_defaults.audio_filter_dir)); fill_pathname_join(g_defaults.dir.audio_filter, home_dir_buf, "audio_filters", sizeof(g_defaults.dir.audio_filter));
fill_pathname_join(g_defaults.video_filter_dir, home_dir_buf, "video_filters", sizeof(g_defaults.video_filter_dir)); fill_pathname_join(g_defaults.dir.video_filter, home_dir_buf, "video_filters", sizeof(g_defaults.dir.video_filter));
fill_pathname_join(g_defaults.playlist_dir, home_dir_buf, "playlists", sizeof(g_defaults.playlist_dir)); fill_pathname_join(g_defaults.dir.playlist, home_dir_buf, "playlists", sizeof(g_defaults.dir.playlist));
#endif #endif
#ifdef RELEASE_BUILD #ifdef RELEASE_BUILD
fill_pathname_join(g_defaults.remap_dir, bundle_path_buf, "Contents/Resources/remaps", sizeof(g_defaults.remap_dir)); fill_pathname_join(g_defaults.dir.remap, bundle_path_buf, "Contents/Resources/remaps", sizeof(g_defaults.dir.remap));
fill_pathname_join(g_defaults.playlist_dir, bundle_path_buf, "Contents/Resources/playlists", sizeof(g_defaults.playlist_dir)); fill_pathname_join(g_defaults.dir.playlist, bundle_path_buf, "Contents/Resources/playlists", sizeof(g_defaults.dir.playlist));
fill_pathname_join(g_defaults.shader_dir, bundle_path_buf, "Contents/Resources/shaders", sizeof(g_defaults.shader_dir)); fill_pathname_join(g_defaults.dir.shader, bundle_path_buf, "Contents/Resources/shaders", sizeof(g_defaults.dir.shader));
fill_pathname_join(g_defaults.core_dir, bundle_path_buf, "Contents/Resources/cores", sizeof(g_defaults.core_dir)); fill_pathname_join(g_defaults.dir.core, bundle_path_buf, "Contents/Resources/cores", sizeof(g_defaults.dir.core));
fill_pathname_join(g_defaults.core_info_dir, bundle_path_buf, "Contents/Resources/info", sizeof(g_defaults.core_info_dir)); fill_pathname_join(g_defaults.dir.core_info, bundle_path_buf, "Contents/Resources/info", sizeof(g_defaults.dir.core_info));
fill_pathname_join(g_defaults.overlay_dir, bundle_path_buf, "Contents/Resources/overlays", sizeof(g_defaults.overlay_dir)); fill_pathname_join(g_defaults.dir.overlay, bundle_path_buf, "Contents/Resources/overlays", sizeof(g_defaults.dir.overlay));
fill_pathname_join(g_defaults.autoconfig_dir, bundle_path_buf, "Contents/Resources/autoconfig", sizeof(g_defaults.autoconfig_dir)); fill_pathname_join(g_defaults.dir.autoconfig, bundle_path_buf, "Contents/Resources/autoconfig", sizeof(g_defaults.dir.autoconfig));
fill_pathname_join(g_defaults.core_assets_dir, bundle_path_buf, "Contents/Resources/downloads", sizeof(g_defaults.core_assets_dir)); fill_pathname_join(g_defaults.dir.core_assets, bundle_path_buf, "Contents/Resources/downloads", sizeof(g_defaults.dir.core_assets));
fill_pathname_join(g_defaults.assets_dir, bundle_path_buf, "Contents/Resources/assets", sizeof(g_defaults.assets_dir)); fill_pathname_join(g_defaults.dir.assets, bundle_path_buf, "Contents/Resources/assets", sizeof(g_defaults.dir.assets));
fill_pathname_join(g_defaults.system_dir, bundle_path_buf, "Contents/Resources/system", sizeof(g_defaults.system_dir)); fill_pathname_join(g_defaults.dir.system, bundle_path_buf, "Contents/Resources/system", sizeof(g_defaults.dir.system));
fill_pathname_join(g_defaults.menu_config_dir, bundle_path_buf, "Contents/Resources/configs", sizeof(g_defaults.menu_config_dir)); fill_pathname_join(g_defaults.dir.menu_config, bundle_path_buf, "Contents/Resources/configs", sizeof(g_defaults.dir.menu_config));
fill_pathname_join(g_defaults.config_path, g_defaults.menu_config_dir, "retroarch.cfg", sizeof(g_defaults.config_path)); fill_pathname_join(g_defaults.path.config, g_defaults.dir.menu_config, "retroarch.cfg", sizeof(g_defaults.path.config));
fill_pathname_join(g_defaults.database_dir, bundle_path_buf, "Contents/Resources/rdb", sizeof(g_defaults.database_dir)); fill_pathname_join(g_defaults.dir.database, bundle_path_buf, "Contents/Resources/rdb", sizeof(g_defaults.dir.database));
fill_pathname_join(g_defaults.cursor_dir, bundle_path_buf, "Contents/Resources/cursors", sizeof(g_defaults.cursor_dir)); fill_pathname_join(g_defaults.dir.cursor, bundle_path_buf, "Contents/Resources/cursors", sizeof(g_defaults.dir.cursor));
fill_pathname_join(g_defaults.cheats_dir, bundle_path_buf, "Contents/Resources/cht", sizeof(g_defaults.cheats_dir)); fill_pathname_join(g_defaults.dir.cheats, bundle_path_buf, "Contents/Resources/cht", sizeof(g_defaults.dir.cheats));
fill_pathname_join(g_defaults.sram_dir, bundle_path_buf, "Contents/Resources/saves", sizeof(g_defaults.sram_dir)); fill_pathname_join(g_defaults.dir.sram, bundle_path_buf, "Contents/Resources/saves", sizeof(g_defaults.dir.sram));
fill_pathname_join(g_defaults.savestate_dir, bundle_path_buf, "Contents/Resources/states", sizeof(g_defaults.savestate_dir)); fill_pathname_join(g_defaults.dir.savestate, bundle_path_buf, "Contents/Resources/states", sizeof(g_defaults.dir.savestate));
#endif #endif
CFTemporaryDirectory(temp_dir, sizeof(temp_dir)); CFTemporaryDirectory(temp_dir, sizeof(temp_dir));
strlcpy(g_defaults.extraction_dir, temp_dir, sizeof(g_defaults.extraction_dir)); strlcpy(g_defaults.dir.extraction, temp_dir, sizeof(g_defaults.dir.extraction));
path_mkdir(bundle_path_buf); path_mkdir(bundle_path_buf);
@ -390,10 +390,10 @@ static void frontend_darwin_get_environment_settings(int *argc, char *argv[],
RARCH_ERR("Failed to create or access base directory: %s\n", bundle_path_buf); RARCH_ERR("Failed to create or access base directory: %s\n", bundle_path_buf);
else else
{ {
path_mkdir(g_defaults.system_dir); path_mkdir(g_defaults.dir.system);
if (access(g_defaults.system_dir, 0755) != 0) if (access(g_defaults.dir.system, 0755) != 0)
RARCH_ERR("Failed to create or access system directory: %s.\n", g_defaults.system_dir); RARCH_ERR("Failed to create or access system directory: %s.\n", g_defaults.dir.system);
} }
CFRelease(bundle_path); CFRelease(bundle_path);
@ -598,7 +598,7 @@ static int frontend_darwin_parse_drive_list(void *data)
menu_list_push(list, menu_list_push(list,
"/var/mobile/", "", MENU_FILE_DIRECTORY, 0, 0); "/var/mobile/", "", MENU_FILE_DIRECTORY, 0, 0);
menu_list_push(list, menu_list_push(list,
g_defaults.core_dir, "", MENU_FILE_DIRECTORY, 0, 0); g_defaults.dir.core, "", MENU_FILE_DIRECTORY, 0, 0);
menu_list_push(list, "/", "", menu_list_push(list, "/", "",
MENU_FILE_DIRECTORY, 0, 0); MENU_FILE_DIRECTORY, 0, 0);

View File

@ -183,30 +183,30 @@ static void frontend_gx_get_environment_settings(int *argc, char *argv[],
#ifdef HW_DOL #ifdef HW_DOL
chdir("carda:/retroarch"); chdir("carda:/retroarch");
#endif #endif
getcwd(g_defaults.core_dir, MAXPATHLEN); getcwd(g_defaults.dir.core, MAXPATHLEN);
char *last_slash = strrchr(g_defaults.core_dir, '/'); char *last_slash = strrchr(g_defaults.dir.core, '/');
if (last_slash) if (last_slash)
*last_slash = 0; *last_slash = 0;
char *device_end = strchr(g_defaults.core_dir, '/'); char *device_end = strchr(g_defaults.dir.core, '/');
if (device_end) if (device_end)
snprintf(g_defaults.port_dir, sizeof(g_defaults.port_dir), snprintf(g_defaults.dir.port, sizeof(g_defaults.dir.port),
"%.*s/retroarch", device_end - g_defaults.core_dir, "%.*s/retroarch", device_end - g_defaults.dir.core,
g_defaults.core_dir); g_defaults.dir.core);
else else
fill_pathname_join(g_defaults.port_dir, g_defaults.port_dir, fill_pathname_join(g_defaults.dir.port, g_defaults.dir.port,
"retroarch", sizeof(g_defaults.port_dir)); "retroarch", sizeof(g_defaults.dir.port));
fill_pathname_join(g_defaults.overlay_dir, g_defaults.core_dir, fill_pathname_join(g_defaults.dir.overlay, g_defaults.dir.core,
"overlays", sizeof(g_defaults.overlay_dir)); "overlays", sizeof(g_defaults.dir.overlay));
fill_pathname_join(g_defaults.config_path, g_defaults.port_dir, fill_pathname_join(g_defaults.path.config, g_defaults.dir.port,
"retroarch.cfg", sizeof(g_defaults.config_path)); "retroarch.cfg", sizeof(g_defaults.path.config));
fill_pathname_join(g_defaults.system_dir, g_defaults.port_dir, fill_pathname_join(g_defaults.dir.system, g_defaults.dir.port,
"system", sizeof(g_defaults.system_dir)); "system", sizeof(g_defaults.dir.system));
fill_pathname_join(g_defaults.sram_dir, g_defaults.port_dir, fill_pathname_join(g_defaults.dir.sram, g_defaults.dir.port,
"savefiles", sizeof(g_defaults.sram_dir)); "savefiles", sizeof(g_defaults.dir.sram));
fill_pathname_join(g_defaults.savestate_dir, g_defaults.port_dir, fill_pathname_join(g_defaults.dir.savestate, g_defaults.dir.port,
"savefiles", sizeof(g_defaults.savestate_dir)); "savefiles", sizeof(g_defaults.dir.savestate));
fill_pathname_join(g_defaults.playlist_dir, g_defaults.port_dir, fill_pathname_join(g_defaults.dir.playlist, g_defaults.dir.port,
"playlists", sizeof(g_defaults.playlist_dir)); "playlists", sizeof(g_defaults.dir.playlist));
#ifdef IS_SALAMANDER #ifdef IS_SALAMANDER
if (*argc > 2 && argv[1] != NULL && argv[2] != NULL) if (*argc > 2 && argv[1] != NULL && argv[2] != NULL)
@ -340,7 +340,7 @@ static void frontend_gx_exitspawn(char *s, size_t len)
/* FIXME/TODO - hack /* FIXME/TODO - hack
* direct loading failed (out of memory), try to jump to Salamander, * direct loading failed (out of memory), try to jump to Salamander,
* then load the correct core */ * then load the correct core */
fill_pathname_join(s, g_defaults.core_dir, fill_pathname_join(s, g_defaults.dir.core,
"boot.dol", len); "boot.dol", len);
#endif #endif
frontend_gx_exec(s, should_load_game); frontend_gx_exec(s, should_load_game);

View File

@ -186,15 +186,15 @@ static void frontend_ps3_get_environment_settings(int *argc, char *argv[],
== CELL_GAME_ATTRIBUTE_APP_HOME) == CELL_GAME_ATTRIBUTE_APP_HOME)
RARCH_LOG("RetroArch was launched from host machine (APP_HOME).\n"); RARCH_LOG("RetroArch was launched from host machine (APP_HOME).\n");
ret = cellGameContentPermit(contentInfoPath, g_defaults.port_dir); ret = cellGameContentPermit(contentInfoPath, g_defaults.dir.port);
#ifdef HAVE_MULTIMAN #ifdef HAVE_MULTIMAN
if (multiman_detected) if (multiman_detected)
{ {
fill_pathname_join(contentInfoPath, "/dev_hdd0/game/", fill_pathname_join(contentInfoPath, "/dev_hdd0/game/",
EMULATOR_CONTENT_DIR, sizeof(contentInfoPath)); EMULATOR_CONTENT_DIR, sizeof(contentInfoPath));
fill_pathname_join(g_defaults.port_dir, contentInfoPath, fill_pathname_join(g_defaults.dir.port, contentInfoPath,
"USRDIR", sizeof(g_defaults.port_dir)); "USRDIR", sizeof(g_defaults.dir.port));
} }
#endif #endif
@ -204,29 +204,29 @@ static void frontend_ps3_get_environment_settings(int *argc, char *argv[],
{ {
RARCH_LOG("cellGameContentPermit() OK.\n"); RARCH_LOG("cellGameContentPermit() OK.\n");
RARCH_LOG("contentInfoPath : [%s].\n", contentInfoPath); RARCH_LOG("contentInfoPath : [%s].\n", contentInfoPath);
RARCH_LOG("usrDirPath : [%s].\n", g_defaults.port_dir); RARCH_LOG("usrDirPath : [%s].\n", g_defaults.dir.port);
} }
fill_pathname_join(g_defaults.core_dir, g_defaults.port_dir, fill_pathname_join(g_defaults.dir.core, g_defaults.dir.port,
"cores", sizeof(g_defaults.core_dir)); "cores", sizeof(g_defaults.dir.core));
fill_pathname_join(g_defaults.core_info_dir, g_defaults.port_dir, fill_pathname_join(g_defaults.dir.core_info, g_defaults.dir.port,
"cores", sizeof(g_defaults.core_info_dir)); "cores", sizeof(g_defaults.dir.core_info));
fill_pathname_join(g_defaults.savestate_dir, g_defaults.core_dir, fill_pathname_join(g_defaults.dir.savestate, g_defaults.dir.core,
"savestates", sizeof(g_defaults.savestate_dir)); "savestates", sizeof(g_defaults.dir.savestate));
fill_pathname_join(g_defaults.sram_dir, g_defaults.core_dir, fill_pathname_join(g_defaults.dir.sram, g_defaults.dir.core,
"savefiles", sizeof(g_defaults.sram_dir)); "savefiles", sizeof(g_defaults.dir.sram));
fill_pathname_join(g_defaults.system_dir, g_defaults.core_dir, fill_pathname_join(g_defaults.dir.system, g_defaults.dir.core,
"system", sizeof(g_defaults.system_dir)); "system", sizeof(g_defaults.dir.system));
fill_pathname_join(g_defaults.shader_dir, g_defaults.core_dir, fill_pathname_join(g_defaults.dir.shader, g_defaults.dir.core,
"shaders_cg", sizeof(g_defaults.shader_dir)); "shaders_cg", sizeof(g_defaults.dir.shader));
fill_pathname_join(g_defaults.config_path, g_defaults.port_dir, fill_pathname_join(g_defaults.path.config, g_defaults.dir.port,
"retroarch.cfg", sizeof(g_defaults.config_path)); "retroarch.cfg", sizeof(g_defaults.path.config));
fill_pathname_join(g_defaults.overlay_dir, g_defaults.core_dir, fill_pathname_join(g_defaults.dir.overlay, g_defaults.dir.core,
"overlays", sizeof(g_defaults.overlay_dir)); "overlays", sizeof(g_defaults.dir.overlay));
fill_pathname_join(g_defaults.assets_dir, g_defaults.core_dir, fill_pathname_join(g_defaults.dir.assets, g_defaults.dir.core,
"media", sizeof(g_defaults.assets_dir)); "media", sizeof(g_defaults.dir.assets));
fill_pathname_join(g_defaults.playlist_dir, g_defaults.core_dir, fill_pathname_join(g_defaults.dir.playlist, g_defaults.dir.core,
"playlists", sizeof(g_defaults.playlist_dir)); "playlists", sizeof(g_defaults.dir.playlist));
} }
#ifndef IS_SALAMANDER #ifndef IS_SALAMANDER
@ -364,9 +364,9 @@ static void frontend_ps3_exec(const char *path, bool should_load_game)
NULL, NULL, 0, 1000, SYS_PROCESS_PRIMARY_STACK_SIZE_1M); NULL, NULL, 0, 1000, SYS_PROCESS_PRIMARY_STACK_SIZE_1M);
} }
#else #else
if (should_load_game && global->fullpath[0] != '\0') if (should_load_game && global->path.fullpath[0] != '\0')
{ {
strlcpy(game_path, global->fullpath, sizeof(game_path)); strlcpy(game_path, global->path.fullpath, sizeof(game_path));
const char * const spawn_argv[] = { const char * const spawn_argv[] = {
game_path, game_path,

View File

@ -68,29 +68,29 @@ static void frontend_psp_get_environment_settings(int *argc, char *argv[],
strlcpy(eboot_path, argv[0], sizeof(eboot_path)); strlcpy(eboot_path, argv[0], sizeof(eboot_path));
fill_pathname_basedir(g_defaults.port_dir, argv[0], sizeof(g_defaults.port_dir)); fill_pathname_basedir(g_defaults.dir.port, argv[0], sizeof(g_defaults.dir.port));
RARCH_LOG("port dir: [%s]\n", g_defaults.port_dir); RARCH_LOG("port dir: [%s]\n", g_defaults.dir.port);
fill_pathname_join(g_defaults.assets_dir, g_defaults.port_dir, fill_pathname_join(g_defaults.dir.assets, g_defaults.dir.port,
"media", sizeof(g_defaults.assets_dir)); "media", sizeof(g_defaults.dir.assets));
fill_pathname_join(g_defaults.core_dir, g_defaults.port_dir, fill_pathname_join(g_defaults.dir.core, g_defaults.dir.port,
"cores", sizeof(g_defaults.core_dir)); "cores", sizeof(g_defaults.dir.core));
fill_pathname_join(g_defaults.core_info_dir, g_defaults.port_dir, fill_pathname_join(g_defaults.dir.core_info, g_defaults.dir.port,
"cores", sizeof(g_defaults.core_info_dir)); "cores", sizeof(g_defaults.dir.core_info));
fill_pathname_join(g_defaults.savestate_dir, g_defaults.core_dir, fill_pathname_join(g_defaults.dir.savestate, g_defaults.dir.core,
"savestates", sizeof(g_defaults.savestate_dir)); "savestates", sizeof(g_defaults.dir.savestate));
fill_pathname_join(g_defaults.sram_dir, g_defaults.core_dir, fill_pathname_join(g_defaults.dir.sram, g_defaults.dir.core,
"savefiles", sizeof(g_defaults.sram_dir)); "savefiles", sizeof(g_defaults.dir.sram));
fill_pathname_join(g_defaults.system_dir, g_defaults.core_dir, fill_pathname_join(g_defaults.dir.system, g_defaults.dir.core,
"system", sizeof(g_defaults.system_dir)); "system", sizeof(g_defaults.dir.system));
fill_pathname_join(g_defaults.playlist_dir, g_defaults.core_dir, fill_pathname_join(g_defaults.dir.playlist, g_defaults.dir.core,
"playlists", sizeof(g_defaults.playlist_dir)); "playlists", sizeof(g_defaults.dir.playlist));
fill_pathname_join(g_defaults.config_path, g_defaults.port_dir, fill_pathname_join(g_defaults.path.config, g_defaults.dir.port,
"retroarch.cfg", sizeof(g_defaults.config_path)); "retroarch.cfg", sizeof(g_defaults.path.config));
fill_pathname_join(g_defaults.cheats_dir, g_defaults.cheats_dir, fill_pathname_join(g_defaults.dir.cheats, g_defaults.dir.cheats,
"cheats", sizeof(g_defaults.cheats_dir)); "cheats", sizeof(g_defaults.dir.cheats));
fill_pathname_join(g_defaults.remap_dir, g_defaults.remap_dir, fill_pathname_join(g_defaults.dir.remap, g_defaults.dir.remap,
"remaps", sizeof(g_defaults.remap_dir)); "remaps", sizeof(g_defaults.dir.remap));
#ifndef IS_SALAMANDER #ifndef IS_SALAMANDER
if (argv[1] && (argv[1][0] != '\0')) if (argv[1] && (argv[1][0] != '\0'))
@ -205,10 +205,10 @@ static void frontend_psp_exec(const char *path, bool should_load_game)
#ifndef IS_SALAMANDER #ifndef IS_SALAMANDER
global_t *global = global_get_ptr(); global_t *global = global_get_ptr();
if (should_load_game && global->fullpath[0] != '\0') if (should_load_game && global->path.fullpath[0] != '\0')
{ {
argp[args] = '\0'; argp[args] = '\0';
strlcat(argp + args, global->fullpath, sizeof(argp) - args); strlcat(argp + args, global->path.fullpath, sizeof(argp) - args);
args += strlen(argp + args) + 1; args += strlen(argp + args) + 1;
} }
#endif #endif

View File

@ -45,18 +45,18 @@ static int frontend_qnx_get_rating(void)
static void frontend_qnx_get_environment_settings(int *argc, char *argv[], static void frontend_qnx_get_environment_settings(int *argc, char *argv[],
void *data, void *params_data) void *data, void *params_data)
{ {
fill_pathname_join(g_defaults.config_path, "app/native", fill_pathname_join(g_defaults.path.config, "app/native",
"retroarch.cfg", sizeof(g_defaults.config_path)); "retroarch.cfg", sizeof(g_defaults.path.config));
fill_pathname_join(g_defaults.shader_dir, "app/native", fill_pathname_join(g_defaults.dir.shader, "app/native",
"shaders_glsl", sizeof(g_defaults.shader_dir)); "shaders_glsl", sizeof(g_defaults.dir.shader));
fill_pathname_join(g_defaults.overlay_dir, "app/native", fill_pathname_join(g_defaults.dir.overlay, "app/native",
"overlays", sizeof(g_defaults.overlay_dir)); "overlays", sizeof(g_defaults.dir.overlay));
fill_pathname_join(g_defaults.core_dir, "app/native", fill_pathname_join(g_defaults.dir.core, "app/native",
"lib", sizeof(g_defaults.core_dir)); "lib", sizeof(g_defaults.dir.core));
fill_pathname_join(g_defaults.core_info_dir, "app/native", fill_pathname_join(g_defaults.dir.core_info, "app/native",
"info", sizeof(g_defaults.core_info_dir)); "info", sizeof(g_defaults.dir.core_info));
fill_pathname_join(g_defaults.playlist_dir, "app/native", fill_pathname_join(g_defaults.dir.playlist, "app/native",
"playlists", sizeof(g_defaults.playlist_dir)); "playlists", sizeof(g_defaults.dir.playlist));
} }
enum frontend_architecture frontend_qnx_get_architecture(void) enum frontend_architecture frontend_qnx_get_architecture(void)

View File

@ -132,7 +132,7 @@ void system_exec_wii(const char *_path, bool should_load_game)
#ifdef IS_SALAMANDER #ifdef IS_SALAMANDER
strlcpy(game_path, gx_rom_path, sizeof(game_path)); strlcpy(game_path, gx_rom_path, sizeof(game_path));
#else #else
strlcpy(game_path, global->fullpath, sizeof(game_path)); strlcpy(game_path, global->path.fullpath, sizeof(game_path));
#endif #endif
} }

View File

@ -176,34 +176,34 @@ static void frontend_xdk_get_environment_settings(int *argc, char *argv[],
#endif #endif
#if defined(_XBOX1) #if defined(_XBOX1)
strlcpy(g_defaults.core_dir, "D:", sizeof(g_defaults.core_dir)); strlcpy(g_defaults.dir.core, "D:", sizeof(g_defaults.dir.core));
strlcpy(g_defaults.core_info_dir, "D:", sizeof(g_defaults.core_info_dir)); strlcpy(g_defaults.dir.core_info, "D:", sizeof(g_defaults.dir.core_info));
fill_pathname_join(g_defaults.config_path, g_defaults.core_dir, fill_pathname_join(g_defaults.path.config, g_defaults.dir.core,
"retroarch.cfg", sizeof(g_defaults.config_path)); "retroarch.cfg", sizeof(g_defaults.path.config));
fill_pathname_join(g_defaults.savestate_dir, g_defaults.core_dir, fill_pathname_join(g_defaults.dir.savestate, g_defaults.dir.core,
"savestates", sizeof(g_defaults.savestate_dir)); "savestates", sizeof(g_defaults.dir.savestate));
fill_pathname_join(g_defaults.sram_dir, g_defaults.core_dir, fill_pathname_join(g_defaults.dir.sram, g_defaults.dir.core,
"savefiles", sizeof(g_defaults.sram_dir)); "savefiles", sizeof(g_defaults.dir.sram));
fill_pathname_join(g_defaults.system_dir, g_defaults.core_dir, fill_pathname_join(g_defaults.dir.system, g_defaults.dir.core,
"system", sizeof(g_defaults.system_dir)); "system", sizeof(g_defaults.dir.system));
fill_pathname_join(g_defaults.screenshot_dir, g_defaults.core_dir, fill_pathname_join(g_defaults.dir.screenshot, g_defaults.dir.core,
"screenshots", sizeof(g_defaults.screenshot_dir)); "screenshots", sizeof(g_defaults.dir.screenshot));
#elif defined(_XBOX360) #elif defined(_XBOX360)
strlcpy(g_defaults.core_dir, "game:", sizeof(g_defaults.core_dir)); strlcpy(g_defaults.dir.core, "game:", sizeof(g_defaults.dir.core));
strlcpy(g_defaults.core_info_dir, strlcpy(g_defaults.dir.core_info,
"game:", sizeof(g_defaults.core_info_dir)); "game:", sizeof(g_defaults.dir.core_info));
strlcpy(g_defaults.config_path, strlcpy(g_defaults.path.config,
"game:\\retroarch.cfg", sizeof(g_defaults.config_path)); "game:\\retroarch.cfg", sizeof(g_defaults.path.config));
strlcpy(g_defaults.screenshot_dir, strlcpy(g_defaults.dir.screenshot,
"game:", sizeof(g_defaults.screenshot_dir)); "game:", sizeof(g_defaults.dir.screenshot));
strlcpy(g_defaults.savestate_dir, strlcpy(g_defaults.dir.savestate,
"game:\\savestates", sizeof(g_defaults.savestate_dir)); "game:\\savestates", sizeof(g_defaults.dir.savestate));
strlcpy(g_defaults.playlist_dir, strlcpy(g_defaults.dir.playlist,
"game:\\playlists", sizeof(g_defaults.playlist_dir)); "game:\\playlists", sizeof(g_defaults.dir.playlist));
strlcpy(g_defaults.sram_dir, strlcpy(g_defaults.dir.sram,
"game:\\savefiles", sizeof(g_defaults.sram_dir)); "game:\\savefiles", sizeof(g_defaults.dir.sram));
strlcpy(g_defaults.system_dir, strlcpy(g_defaults.dir.system,
"game:\\system", sizeof(g_defaults.system_dir)); "game:\\system", sizeof(g_defaults.dir.system));
#endif #endif
#ifndef IS_SALAMANDER #ifndef IS_SALAMANDER

View File

@ -40,24 +40,26 @@ void main_exit_save_config(void)
global_t *global = global_get_ptr(); global_t *global = global_get_ptr();
rarch_system_info_t *info = rarch_system_info_get_ptr(); rarch_system_info_t *info = rarch_system_info_get_ptr();
if (settings->config_save_on_exit && *global->config_path) if (settings->config_save_on_exit && *global->path.config)
{ {
/* restore original paths in case per-core organization is enabled */ /* restore original paths in case per-core organization is enabled */
if (settings->sort_savefiles_enable && orig_savefile_dir[0] != '\0') if (settings->sort_savefiles_enable && orig_savefile_dir[0] != '\0')
strlcpy(global->savefile_dir,orig_savefile_dir,sizeof(global->savefile_dir)); strlcpy(global->dir.savefile, orig_savefile_dir,
sizeof(global->dir.savefile));
if (settings->sort_savestates_enable && orig_savestate_dir[0] != '\0') if (settings->sort_savestates_enable && orig_savestate_dir[0] != '\0')
strlcpy(global->savestate_dir,orig_savestate_dir,sizeof(global->savestate_dir)); strlcpy(global->dir.savestate, orig_savestate_dir,
sizeof(global->dir.savestate));
/* Save last core-specific config to the default config location, /* Save last core-specific config to the default config location,
* needed on consoles for core switching and reusing last good * needed on consoles for core switching and reusing last good
* config for new cores. * config for new cores.
*/ */
config_save_file(global->config_path); config_save_file(global->path.config);
/* Flush out the core specific config. */ /* Flush out the core specific config. */
if (*global->core_specific_config_path && if (*global->path.core_specific_config &&
settings->core_specific_config) settings->core_specific_config)
config_save_file(global->core_specific_config_path); config_save_file(global->path.core_specific_config);
} }
event_command(EVENT_CMD_AUTOSAVE_STATE); event_command(EVENT_CMD_AUTOSAVE_STATE);
@ -81,7 +83,7 @@ void main_exit(void *args)
main_exit_save_config(); main_exit_save_config();
if (global->main_is_init) if (global->inited.main)
{ {
#ifdef HAVE_MENU #ifdef HAVE_MENU
/* Do not want menu context to live any more. */ /* Do not want menu context to live any more. */
@ -125,50 +127,50 @@ void main_exit(void *args)
static void check_defaults_dirs(void) static void check_defaults_dirs(void)
{ {
if (*g_defaults.core_assets_dir) if (*g_defaults.dir.core_assets)
path_mkdir(g_defaults.core_assets_dir); path_mkdir(g_defaults.dir.core_assets);
if (*g_defaults.remap_dir) if (*g_defaults.dir.remap)
path_mkdir(g_defaults.remap_dir); path_mkdir(g_defaults.dir.remap);
if (*g_defaults.autoconfig_dir) if (*g_defaults.dir.autoconfig)
path_mkdir(g_defaults.autoconfig_dir); path_mkdir(g_defaults.dir.autoconfig);
if (*g_defaults.audio_filter_dir) if (*g_defaults.dir.audio_filter)
path_mkdir(g_defaults.audio_filter_dir); path_mkdir(g_defaults.dir.audio_filter);
if (*g_defaults.video_filter_dir) if (*g_defaults.dir.video_filter)
path_mkdir(g_defaults.video_filter_dir); path_mkdir(g_defaults.dir.video_filter);
if (*g_defaults.assets_dir) if (*g_defaults.dir.assets)
path_mkdir(g_defaults.assets_dir); path_mkdir(g_defaults.dir.assets);
if (*g_defaults.playlist_dir) if (*g_defaults.dir.playlist)
path_mkdir(g_defaults.playlist_dir); path_mkdir(g_defaults.dir.playlist);
if (*g_defaults.core_dir) if (*g_defaults.dir.core)
path_mkdir(g_defaults.core_dir); path_mkdir(g_defaults.dir.core);
if (*g_defaults.core_info_dir) if (*g_defaults.dir.core_info)
path_mkdir(g_defaults.core_info_dir); path_mkdir(g_defaults.dir.core_info);
if (*g_defaults.overlay_dir) if (*g_defaults.dir.overlay)
path_mkdir(g_defaults.overlay_dir); path_mkdir(g_defaults.dir.overlay);
if (*g_defaults.port_dir) if (*g_defaults.dir.port)
path_mkdir(g_defaults.port_dir); path_mkdir(g_defaults.dir.port);
if (*g_defaults.shader_dir) if (*g_defaults.dir.shader)
path_mkdir(g_defaults.shader_dir); path_mkdir(g_defaults.dir.shader);
if (*g_defaults.savestate_dir) if (*g_defaults.dir.savestate)
path_mkdir(g_defaults.savestate_dir); path_mkdir(g_defaults.dir.savestate);
if (*g_defaults.sram_dir) if (*g_defaults.dir.sram)
path_mkdir(g_defaults.sram_dir); path_mkdir(g_defaults.dir.sram);
if (*g_defaults.system_dir) if (*g_defaults.dir.system)
path_mkdir(g_defaults.system_dir); path_mkdir(g_defaults.dir.system);
if (*g_defaults.resampler_dir) if (*g_defaults.dir.resampler)
path_mkdir(g_defaults.resampler_dir); path_mkdir(g_defaults.dir.resampler);
if (*g_defaults.menu_config_dir) if (*g_defaults.dir.menu_config)
path_mkdir(g_defaults.menu_config_dir); path_mkdir(g_defaults.dir.menu_config);
if (*g_defaults.content_history_dir) if (*g_defaults.dir.content_history)
path_mkdir(g_defaults.content_history_dir); path_mkdir(g_defaults.dir.content_history);
if (*g_defaults.extraction_dir) if (*g_defaults.dir.extraction)
path_mkdir(g_defaults.extraction_dir); path_mkdir(g_defaults.dir.extraction);
if (*g_defaults.database_dir) if (*g_defaults.dir.database)
path_mkdir(g_defaults.database_dir); path_mkdir(g_defaults.dir.database);
if (*g_defaults.cursor_dir) if (*g_defaults.dir.cursor)
path_mkdir(g_defaults.cursor_dir); path_mkdir(g_defaults.dir.cursor);
if (*g_defaults.cheats_dir) if (*g_defaults.dir.cheats)
path_mkdir(g_defaults.cheats_dir); path_mkdir(g_defaults.dir.cheats);
} }
static void history_playlist_push(content_playlist_t *playlist, static void history_playlist_push(content_playlist_t *playlist,
@ -179,7 +181,7 @@ static void history_playlist_push(content_playlist_t *playlist,
global_t *global = global_get_ptr(); global_t *global = global_get_ptr();
rarch_system_info_t *system = rarch_system_info_get_ptr(); rarch_system_info_t *system = rarch_system_info_get_ptr();
if (!playlist || (global->core_type == CORE_TYPE_DUMMY) || !info) if (!playlist || (global->inited.core.type == CORE_TYPE_DUMMY) || !info)
return; return;
/* Path can be relative here. /* Path can be relative here.
@ -251,7 +253,7 @@ bool main_load_content(int argc, char **argv, void *args,
rarch_argc_ptr = (int*)&rarch_argc; rarch_argc_ptr = (int*)&rarch_argc;
} }
if (global->main_is_init) if (global->inited.main)
rarch_main_deinit(); rarch_main_deinit();
if ((ret = rarch_main_init(*rarch_argc_ptr, rarch_argv_ptr))) if ((ret = rarch_main_init(*rarch_argc_ptr, rarch_argv_ptr)))
@ -322,10 +324,10 @@ int rarch_main(int argc, char *argv[], void *data)
global_t *global = global_get_ptr(); global_t *global = global_get_ptr();
rarch_system_info_t *system = rarch_system_info_get_ptr(); rarch_system_info_t *system = rarch_system_info_get_ptr();
if (global->content_is_init || system->no_content) if (global->inited.content || system->no_content)
history_playlist_push( history_playlist_push(
g_defaults.history, g_defaults.history,
global->fullpath, global->path.fullpath,
settings->libretro, settings->libretro,
system ? &system->info : NULL); system ? &system->info : NULL);
} }

View File

@ -89,11 +89,11 @@ static void find_and_set_first_file(char *s, size_t len,
char first_file[PATH_MAX_LENGTH] = {0}; char first_file[PATH_MAX_LENGTH] = {0};
find_first_libretro_core(first_file, sizeof(first_file), find_first_libretro_core(first_file, sizeof(first_file),
g_defaults.core_dir, ext); g_defaults.dir.core, ext);
if (first_file[0] != '\0') if (first_file[0] != '\0')
{ {
fill_pathname_join(s, g_defaults.core_dir, first_file, len); fill_pathname_join(s, g_defaults.dir.core, first_file, len);
RARCH_LOG("libretro_path now set to: %s.\n", s); RARCH_LOG("libretro_path now set to: %s.\n", s);
} }
else else
@ -105,13 +105,13 @@ static void salamander_init(char *s, size_t len)
/* normal executable loading path */ /* normal executable loading path */
bool config_file_exists = false; bool config_file_exists = false;
if (path_file_exists(g_defaults.config_path)) if (path_file_exists(g_defaults.path.config))
config_file_exists = true; config_file_exists = true;
if (config_file_exists) if (config_file_exists)
{ {
char tmp_str[PATH_MAX_LENGTH]; char tmp_str[PATH_MAX_LENGTH];
config_file_t * conf = (config_file_t*)config_file_new(g_defaults.config_path); config_file_t * conf = (config_file_t*)config_file_new(g_defaults.path.config);
if (conf) if (conf)
{ {
@ -137,7 +137,7 @@ static void salamander_init(char *s, size_t len)
if (conf) if (conf)
{ {
config_set_string(conf, "libretro_path", s); config_set_string(conf, "libretro_path", s);
config_file_write(conf, g_defaults.config_path); config_file_write(conf, g_defaults.path.config);
config_file_free(conf); config_file_free(conf);
} }
} }

View File

@ -71,33 +71,40 @@ enum sound_mode_enums
struct defaults struct defaults
{ {
char core_assets_dir[PATH_MAX_LENGTH]; struct
char menu_config_dir[PATH_MAX_LENGTH]; {
char config_path[PATH_MAX_LENGTH]; char core_assets[PATH_MAX_LENGTH];
char core_path[PATH_MAX_LENGTH]; char menu_config[PATH_MAX_LENGTH];
char autoconfig_dir[PATH_MAX_LENGTH]; char autoconfig[PATH_MAX_LENGTH];
char audio_filter_dir[PATH_MAX_LENGTH]; char audio_filter[PATH_MAX_LENGTH];
char video_filter_dir[PATH_MAX_LENGTH]; char video_filter[PATH_MAX_LENGTH];
char assets_dir[PATH_MAX_LENGTH]; char assets[PATH_MAX_LENGTH];
char core_dir[PATH_MAX_LENGTH]; char core[PATH_MAX_LENGTH];
char core_info_dir[PATH_MAX_LENGTH]; char core_info[PATH_MAX_LENGTH];
char overlay_dir[PATH_MAX_LENGTH]; char overlay[PATH_MAX_LENGTH];
char osk_overlay_dir[PATH_MAX_LENGTH]; char osk_overlay[PATH_MAX_LENGTH];
char port_dir[PATH_MAX_LENGTH]; char port[PATH_MAX_LENGTH];
char shader_dir[PATH_MAX_LENGTH]; char shader[PATH_MAX_LENGTH];
char savestate_dir[PATH_MAX_LENGTH]; char savestate[PATH_MAX_LENGTH];
char resampler_dir[PATH_MAX_LENGTH]; char resampler[PATH_MAX_LENGTH];
char sram_dir[PATH_MAX_LENGTH]; char sram[PATH_MAX_LENGTH];
char screenshot_dir[PATH_MAX_LENGTH]; char screenshot[PATH_MAX_LENGTH];
char system_dir[PATH_MAX_LENGTH]; char system[PATH_MAX_LENGTH];
char playlist_dir[PATH_MAX_LENGTH]; char playlist[PATH_MAX_LENGTH];
char content_history_dir[PATH_MAX_LENGTH]; char content_history[PATH_MAX_LENGTH];
char remap_dir[PATH_MAX_LENGTH]; char remap[PATH_MAX_LENGTH];
char extraction_dir[PATH_MAX_LENGTH]; char extraction[PATH_MAX_LENGTH];
char wallpapers_dir[PATH_MAX_LENGTH]; char wallpapers[PATH_MAX_LENGTH];
char database_dir[PATH_MAX_LENGTH]; char database[PATH_MAX_LENGTH];
char cursor_dir[PATH_MAX_LENGTH]; char cursor[PATH_MAX_LENGTH];
char cheats_dir[PATH_MAX_LENGTH]; char cheats[PATH_MAX_LENGTH];
} dir;
struct
{
char config[PATH_MAX_LENGTH];
char core[PATH_MAX_LENGTH];
} path;
struct struct
{ {
@ -146,7 +153,7 @@ static INLINE void rarch_fail(int error_code, const char *error)
/* We cannot longjmp unless we're in rarch_main_init(). /* We cannot longjmp unless we're in rarch_main_init().
* If not, something went very wrong, and we should * If not, something went very wrong, and we should
* just exit right away. */ * just exit right away. */
rarch_assert(global->error_in_init); rarch_assert(global->inited.error);
strlcpy(global->error_string, error, strlcpy(global->error_string, error,
sizeof(global->error_string)); sizeof(global->error_string));

View File

@ -131,13 +131,13 @@ static bool input_apply_turbo(unsigned port, unsigned id, bool res)
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
global_t *global = global_get_ptr(); global_t *global = global_get_ptr();
if (res && global->turbo_frame_enable[port]) if (res && global->turbo.frame_enable[port])
global->turbo_enable[port] |= (1 << id); global->turbo.enable[port] |= (1 << id);
else if (!res) else if (!res)
global->turbo_enable[port] &= ~(1 << id); global->turbo.enable[port] &= ~(1 << id);
if (global->turbo_enable[port] & (1 << id)) if (global->turbo.enable[port] & (1 << id))
return res && ((global->turbo_count % settings->input.turbo_period) return res && ((global->turbo.count % settings->input.turbo_period)
< settings->input.turbo_duty_cycle); < settings->input.turbo_duty_cycle);
return res; return res;
} }
@ -283,10 +283,10 @@ void retro_init_libretro_cbs(void *data)
if (!driver->netplay_data) if (!driver->netplay_data)
return; return;
if (global->netplay_is_spectate) if (global->netplay.is_spectate)
{ {
pretro_set_input_state( pretro_set_input_state(
(global->netplay_is_client ? (global->netplay.is_client ?
input_state_spectate_client : input_state_spectate) input_state_spectate_client : input_state_spectate)
); );
} }

View File

@ -330,9 +330,9 @@ static int deferred_archive_open_detect_core(menu_displaylist_info_t *info)
info->setting = menu_setting_find(info->label); info->setting = menu_setting_find(info->label);
if (global->core_info) if (global->core_info.list)
strlcpy(info->exts, core_info_list_get_all_extensions( strlcpy(info->exts, core_info_list_get_all_extensions(
global->core_info), sizeof(info->exts)); global->core_info.list), sizeof(info->exts));
else if (global->menu.info.valid_extensions) else if (global->menu.info.valid_extensions)
{ {
if (*global->menu.info.valid_extensions) if (*global->menu.info.valid_extensions)
@ -585,9 +585,9 @@ static int deferred_push_detect_core_list(menu_displaylist_info_t *info)
global_t *global = global_get_ptr(); global_t *global = global_get_ptr();
info->type_default = MENU_FILE_PLAIN; info->type_default = MENU_FILE_PLAIN;
if (global->core_info) if (global->core_info.list)
strlcpy(info->exts, core_info_list_get_all_extensions( strlcpy(info->exts, core_info_list_get_all_extensions(
global->core_info), sizeof(info->exts)); global->core_info.list), sizeof(info->exts));
(void)settings; (void)settings;

View File

@ -80,8 +80,8 @@ static void menu_action_setting_disp_set_label_configurations(
*w = 19; *w = 19;
strlcpy(s2, path, len2); strlcpy(s2, path, len2);
if (global && *global->config_path) if (global && *global->path.config)
fill_pathname_base(s, global->config_path, fill_pathname_base(s, global->path.config,
len); len);
else else
strlcpy(s, menu_hash_to_str(MENU_VALUE_DIRECTORY_DEFAULT), len); strlcpy(s, menu_hash_to_str(MENU_VALUE_DIRECTORY_DEFAULT), len);

View File

@ -81,7 +81,7 @@ static int rarch_defer_core_wrapper(menu_displaylist_info_t *info,
sizeof(menu_path_new)); sizeof(menu_path_new));
} }
ret = rarch_defer_core(global->core_info, ret = rarch_defer_core(global->core_info.list,
menu_path_new, path, menu_label, menu->deferred_path, menu_path_new, path, menu_label, menu->deferred_path,
sizeof(menu->deferred_path)); sizeof(menu->deferred_path));
@ -165,7 +165,7 @@ static int action_ok_file_load_detect_core(const char *path,
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
global_t *global = global_get_ptr(); global_t *global = global_get_ptr();
strlcpy(global->fullpath, detect_content_path, sizeof(global->fullpath)); strlcpy(global->path.fullpath, detect_content_path, sizeof(global->path.fullpath));
strlcpy(settings->libretro, path, sizeof(settings->libretro)); strlcpy(settings->libretro, path, sizeof(settings->libretro));
event_command(EVENT_CMD_LOAD_CORE); event_command(EVENT_CMD_LOAD_CORE);
menu_common_load_content(false, CORE_TYPE_PLAIN); menu_common_load_content(false, CORE_TYPE_PLAIN);
@ -910,7 +910,7 @@ static int action_ok_remap_file_save_game(const char *path,
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
rarch_system_info_t *info = rarch_system_info_get_ptr(); rarch_system_info_t *info = rarch_system_info_get_ptr();
const char *core_name = info ? info->info.library_name : NULL; const char *core_name = info ? info->info.library_name : NULL;
const char *game_name = global ? path_basename(global->basename) : NULL; const char *game_name = global ? path_basename(global->name.base) : NULL;
fill_pathname_join(directory,settings->input_remapping_directory,core_name,PATH_MAX_LENGTH); fill_pathname_join(directory,settings->input_remapping_directory,core_name,PATH_MAX_LENGTH);
fill_pathname_join(file,core_name,game_name,PATH_MAX_LENGTH); fill_pathname_join(file,core_name,game_name,PATH_MAX_LENGTH);
@ -984,8 +984,8 @@ static int action_ok_core_load_deferred(const char *path,
if (path) if (path)
strlcpy(settings->libretro, path, sizeof(settings->libretro)); strlcpy(settings->libretro, path, sizeof(settings->libretro));
strlcpy(global->fullpath, menu->deferred_path, strlcpy(global->path.fullpath, menu->deferred_path,
sizeof(global->fullpath)); sizeof(global->path.fullpath));
menu_common_load_content(false, CORE_TYPE_PLAIN); menu_common_load_content(false, CORE_TYPE_PLAIN);
@ -1051,7 +1051,7 @@ static int action_ok_core_load(const char *path,
if (menu->load_no_content && settings->core.set_supports_no_game_enable) if (menu->load_no_content && settings->core.set_supports_no_game_enable)
{ {
*global->fullpath = '\0'; *global->path.fullpath = '\0';
menu_common_load_content(false, CORE_TYPE_PLAIN); menu_common_load_content(false, CORE_TYPE_PLAIN);
return -1; return -1;
@ -1263,8 +1263,8 @@ static int action_ok_file_load_ffmpeg(const char *path,
menu_list_get_last(menu_list->menu_stack, menu_list_get_last(menu_list->menu_stack,
&menu_path, NULL, NULL, NULL); &menu_path, NULL, NULL, NULL);
fill_pathname_join(global->fullpath, menu_path, path, fill_pathname_join(global->path.fullpath, menu_path, path,
sizeof(global->fullpath)); sizeof(global->path.fullpath));
menu_common_load_content(true, CORE_TYPE_FFMPEG); menu_common_load_content(true, CORE_TYPE_FFMPEG);
@ -1285,8 +1285,8 @@ static int action_ok_file_load_imageviewer(const char *path,
menu_list_get_last(menu_list->menu_stack, menu_list_get_last(menu_list->menu_stack,
&menu_path, NULL, NULL, NULL); &menu_path, NULL, NULL, NULL);
fill_pathname_join(global->fullpath, menu_path, path, fill_pathname_join(global->path.fullpath, menu_path, path,
sizeof(global->fullpath)); sizeof(global->path.fullpath));
menu_common_load_content(true, CORE_TYPE_IMAGEVIEWER); menu_common_load_content(true, CORE_TYPE_IMAGEVIEWER);
@ -1331,11 +1331,11 @@ static int action_ok_file_load(const char *path,
else else
{ {
if (type == MENU_FILE_IN_CARCHIVE) if (type == MENU_FILE_IN_CARCHIVE)
fill_pathname_join_delim(global->fullpath, menu_path_new, path, fill_pathname_join_delim(global->path.fullpath, menu_path_new, path,
'#',sizeof(global->fullpath)); '#',sizeof(global->path.fullpath));
else else
fill_pathname_join(global->fullpath, menu_path_new, path, fill_pathname_join(global->path.fullpath, menu_path_new, path,
sizeof(global->fullpath)); sizeof(global->path.fullpath));
menu_common_load_content(true, CORE_TYPE_PLAIN); menu_common_load_content(true, CORE_TYPE_PLAIN);
@ -1648,12 +1648,12 @@ static int action_ok_file_load_or_resume(const char *path,
if (!menu) if (!menu)
return -1; return -1;
if (!strcmp(menu->deferred_path, global->fullpath)) if (!strcmp(menu->deferred_path, global->path.fullpath))
return generic_action_ok_command(EVENT_CMD_RESUME); return generic_action_ok_command(EVENT_CMD_RESUME);
else else
{ {
strlcpy(global->fullpath, strlcpy(global->path.fullpath,
menu->deferred_path, sizeof(global->fullpath)); menu->deferred_path, sizeof(global->path.fullpath));
event_command(EVENT_CMD_LOAD_CORE); event_command(EVENT_CMD_LOAD_CORE);
rarch_main_set_state(RARCH_ACTION_STATE_LOAD_CONTENT); rarch_main_set_state(RARCH_ACTION_STATE_LOAD_CONTENT);
return -1; return -1;
@ -1804,7 +1804,7 @@ static int action_ok_load_archive(const char *path,
fill_pathname_join(detect_content_path, menu_path, content_path, fill_pathname_join(detect_content_path, menu_path, content_path,
sizeof(detect_content_path)); sizeof(detect_content_path));
strlcpy(global->fullpath, detect_content_path, sizeof(global->fullpath)); strlcpy(global->path.fullpath, detect_content_path, sizeof(global->path.fullpath));
event_command(EVENT_CMD_LOAD_CORE); event_command(EVENT_CMD_LOAD_CORE);
menu_common_load_content(false, CORE_TYPE_PLAIN); menu_common_load_content(false, CORE_TYPE_PLAIN);
@ -1827,7 +1827,7 @@ static int action_ok_load_archive_detect_core(const char *path,
if (!menu || !menu_list) if (!menu || !menu_list)
return -1; return -1;
ret = rarch_defer_core(global->core_info, menu_path, content_path, label, ret = rarch_defer_core(global->core_info.list, menu_path, content_path, label,
menu->deferred_path, sizeof(menu->deferred_path)); menu->deferred_path, sizeof(menu->deferred_path));
fill_pathname_join(detect_content_path, menu_path, content_path, fill_pathname_join(detect_content_path, menu_path, content_path,

View File

@ -41,15 +41,15 @@ static void menu_environment_get(int *argc, char *argv[],
return; return;
wrap_args->no_content = menu->load_no_content; wrap_args->no_content = menu->load_no_content;
if (!global->has_set_verbosity) if (!global->has_set.verbosity)
wrap_args->verbose = global->verbosity; wrap_args->verbose = global->verbosity;
wrap_args->config_path = *global->config_path ? global->config_path : NULL; wrap_args->config_path = *global->path.config ? global->path.config : NULL;
wrap_args->sram_path = *global->savefile_dir ? global->savefile_dir : NULL; wrap_args->sram_path = *global->dir.savefile ? global->dir.savefile : NULL;
wrap_args->state_path = *global->savestate_dir ? global->savestate_dir : NULL; wrap_args->state_path = *global->dir.savestate ? global->dir.savestate : NULL;
wrap_args->content_path = *global->fullpath ? global->fullpath : NULL; wrap_args->content_path = *global->path.fullpath ? global->path.fullpath : NULL;
if (!global->has_set_libretro) if (!global->has_set.libretro)
wrap_args->libretro_path = *settings->libretro ? settings->libretro : NULL; wrap_args->libretro_path = *settings->libretro ? settings->libretro : NULL;
wrap_args->touched = true; wrap_args->touched = true;
} }
@ -62,18 +62,18 @@ static void menu_push_to_history_playlist(void)
if (!settings->history_list_enable) if (!settings->history_list_enable)
return; return;
if (*global->fullpath) if (*global->path.fullpath)
{ {
char tmp[PATH_MAX_LENGTH] = {0}; char tmp[PATH_MAX_LENGTH] = {0};
char str[PATH_MAX_LENGTH] = {0}; char str[PATH_MAX_LENGTH] = {0};
fill_pathname_base(tmp, global->fullpath, sizeof(tmp)); fill_pathname_base(tmp, global->path.fullpath, sizeof(tmp));
snprintf(str, sizeof(str), "INFO - Loading %s ...", tmp); snprintf(str, sizeof(str), "INFO - Loading %s ...", tmp);
rarch_main_msg_queue_push(str, 1, 1, false); rarch_main_msg_queue_push(str, 1, 1, false);
} }
content_playlist_push(g_defaults.history, content_playlist_push(g_defaults.history,
global->fullpath, global->path.fullpath,
NULL, NULL,
settings->libretro, settings->libretro,
global->menu.info.library_name, global->menu.info.library_name,
@ -110,7 +110,7 @@ bool menu_load_content(enum rarch_core_type type)
char name[PATH_MAX_LENGTH] = {0}; char name[PATH_MAX_LENGTH] = {0};
char msg[PATH_MAX_LENGTH] = {0}; char msg[PATH_MAX_LENGTH] = {0};
fill_pathname_base(name, global->fullpath, sizeof(name)); fill_pathname_base(name, global->path.fullpath, sizeof(name));
snprintf(msg, sizeof(msg), "Failed to load %s.\n", name); snprintf(msg, sizeof(msg), "Failed to load %s.\n", name);
rarch_main_msg_queue_push(msg, 1, 90, false); rarch_main_msg_queue_push(msg, 1, 90, false);
@ -124,7 +124,7 @@ bool menu_load_content(enum rarch_core_type type)
event_command(EVENT_CMD_HISTORY_INIT); event_command(EVENT_CMD_HISTORY_INIT);
if (*global->fullpath || (menu && menu->load_no_content)) if (*global->path.fullpath || (menu && menu->load_no_content))
menu_push_to_history_playlist(); menu_push_to_history_playlist();
event_command(EVENT_CMD_VIDEO_SET_ASPECT_RATIO); event_command(EVENT_CMD_VIDEO_SET_ASPECT_RATIO);
@ -218,8 +218,8 @@ void *menu_init(const void *data)
if (menu_init_entries(&menu->entries) != 0) if (menu_init_entries(&menu->entries) != 0)
goto error; goto error;
global->core_info_current = (core_info_t*)calloc(1, sizeof(core_info_t)); global->core_info.current = (core_info_t*)calloc(1, sizeof(core_info_t));
if (!global->core_info_current) if (!global->core_info.current)
goto error; goto error;
#ifdef HAVE_SHADER_MANAGER #ifdef HAVE_SHADER_MANAGER
@ -261,9 +261,9 @@ error:
if (menu->entries.menu_list) if (menu->entries.menu_list)
menu_list_free(menu->entries.menu_list); menu_list_free(menu->entries.menu_list);
menu->entries.menu_list = NULL; menu->entries.menu_list = NULL;
if (global->core_info_current) if (global->core_info.current)
free(global->core_info_current); free(global->core_info.current);
global->core_info_current = NULL; global->core_info.current = NULL;
if (menu->shader) if (menu->shader)
free(menu->shader); free(menu->shader);
menu->shader = NULL; menu->shader = NULL;
@ -324,12 +324,12 @@ void menu_free(menu_handle_t *menu)
event_command(EVENT_CMD_HISTORY_DEINIT); event_command(EVENT_CMD_HISTORY_DEINIT);
if (global->core_info) if (global->core_info.list)
core_info_list_free(global->core_info); core_info_list_free(global->core_info.list);
if (global->core_info_current) if (global->core_info.current)
free(global->core_info_current); free(global->core_info.current);
global->core_info_current = NULL; global->core_info.current = NULL;
menu_driver_unset_alive(); menu_driver_unset_alive();

View File

@ -79,7 +79,7 @@ void menu_display_fb(void)
if (!settings->menu.pause_libretro) if (!settings->menu.pause_libretro)
{ {
if (global->main_is_init && (global->core_type != CORE_TYPE_DUMMY)) if (global->inited.main && (global->inited.core.type != CORE_TYPE_DUMMY))
{ {
bool block_libretro_input = driver->block_libretro_input; bool block_libretro_input = driver->block_libretro_input;
driver->block_libretro_input = true; driver->block_libretro_input = true;

View File

@ -145,7 +145,7 @@ static int menu_displaylist_parse_core_info(menu_displaylist_info_t *info)
char tmp[PATH_MAX_LENGTH] = {0}; char tmp[PATH_MAX_LENGTH] = {0};
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
global_t *global = global_get_ptr(); global_t *global = global_get_ptr();
core_info_t *core_info = global ? (core_info_t*)global->core_info_current : NULL; core_info_t *core_info = global ? (core_info_t*)global->core_info.current : NULL;
if (!core_info || !core_info->data) if (!core_info || !core_info->data)
{ {
@ -241,7 +241,7 @@ static int menu_displaylist_parse_core_info(menu_displaylist_info_t *info)
if (core_info->firmware_count > 0) if (core_info->firmware_count > 0)
{ {
core_info_list_update_missing_firmware( core_info_list_update_missing_firmware(
global->core_info, core_info->path, global->core_info.list, core_info->path,
settings->system_directory); settings->system_directory);
strlcpy(tmp, menu_hash_to_str(MENU_LABEL_VALUE_CORE_INFO_FIRMWARE), sizeof(tmp)); strlcpy(tmp, menu_hash_to_str(MENU_LABEL_VALUE_CORE_INFO_FIRMWARE), sizeof(tmp));
@ -1582,7 +1582,7 @@ static int menu_displaylist_parse_load_content_settings(menu_displaylist_info_t
if (!menu) if (!menu)
return -1; return -1;
if (global->main_is_init && (global->core_type != CORE_TYPE_DUMMY)) if (global->inited.main && (global->inited.core.type != CORE_TYPE_DUMMY))
{ {
rarch_system_info_t *system = rarch_system_info_get_ptr(); rarch_system_info_t *system = rarch_system_info_get_ptr();
@ -1621,7 +1621,7 @@ static int menu_displaylist_parse_load_content_settings(menu_displaylist_info_t
menu_hash_to_str(MENU_LABEL_CORE_OPTIONS), menu_hash_to_str(MENU_LABEL_CORE_OPTIONS),
MENU_SETTING_ACTION, 0, 0); MENU_SETTING_ACTION, 0, 0);
if (global->has_set_input_descriptors) if (global->has_set.input_descriptors)
menu_list_push(info->list, menu_list_push(info->list,
menu_hash_to_str(MENU_LABEL_VALUE_CORE_INPUT_REMAPPING_OPTIONS), menu_hash_to_str(MENU_LABEL_VALUE_CORE_INPUT_REMAPPING_OPTIONS),
menu_hash_to_str(MENU_LABEL_CORE_INPUT_REMAPPING_OPTIONS), menu_hash_to_str(MENU_LABEL_CORE_INPUT_REMAPPING_OPTIONS),
@ -1630,7 +1630,7 @@ static int menu_displaylist_parse_load_content_settings(menu_displaylist_info_t
menu_hash_to_str(MENU_LABEL_VALUE_CORE_CHEAT_OPTIONS), menu_hash_to_str(MENU_LABEL_VALUE_CORE_CHEAT_OPTIONS),
menu_hash_to_str(MENU_LABEL_CORE_CHEAT_OPTIONS), menu_hash_to_str(MENU_LABEL_CORE_CHEAT_OPTIONS),
MENU_SETTING_ACTION, 0, 0); MENU_SETTING_ACTION, 0, 0);
if ((global->core_type != CORE_TYPE_DUMMY) && system && system->disk_control.get_num_images) if ((global->inited.core.type != CORE_TYPE_DUMMY) && system && system->disk_control.get_num_images)
menu_list_push(info->list, menu_list_push(info->list,
menu_hash_to_str(MENU_LABEL_VALUE_DISK_OPTIONS), menu_hash_to_str(MENU_LABEL_VALUE_DISK_OPTIONS),
menu_hash_to_str(MENU_LABEL_DISK_OPTIONS), menu_hash_to_str(MENU_LABEL_DISK_OPTIONS),
@ -1664,8 +1664,8 @@ static int menu_displaylist_parse_horizontal_content_actions(menu_displaylist_in
if (!menu) if (!menu)
return -1; return -1;
if (global->main_is_init && (global->core_type != CORE_TYPE_DUMMY) if (global->inited.main && (global->inited.core.type != CORE_TYPE_DUMMY)
&& !strcmp(menu->deferred_path, global->fullpath)) && !strcmp(menu->deferred_path, global->path.fullpath))
menu_displaylist_parse_load_content_settings(info); menu_displaylist_parse_load_content_settings(info);
else else
menu_list_push(info->list, "Run", "collection", menu_list_push(info->list, "Run", "collection",
@ -1766,7 +1766,7 @@ static int menu_displaylist_parse_load_content_list(menu_displaylist_info_t *inf
menu_hash_to_str(MENU_LABEL_LOAD_CONTENT), menu_hash_to_str(MENU_LABEL_LOAD_CONTENT),
MENU_SETTING_ACTION, 0, 0); MENU_SETTING_ACTION, 0, 0);
if (global->core_info && core_info_list_num_info_files(global->core_info)) if (core_info_list_num_info_files(global->core_info.list))
{ {
menu_list_push(info->list, menu_list_push(info->list,
menu_hash_to_str(MENU_LABEL_VALUE_DETECT_CORE_LIST), menu_hash_to_str(MENU_LABEL_VALUE_DETECT_CORE_LIST),
@ -2156,8 +2156,7 @@ static int menu_displaylist_parse_generic(menu_displaylist_info_t *info, bool *n
fill_pathname_join(core_path, dir, path, sizeof(core_path)); fill_pathname_join(core_path, dir, path, sizeof(core_path));
if (global->core_info && if (core_info_list_get_display_name(global->core_info.list,
core_info_list_get_display_name(global->core_info,
core_path, display_name, sizeof(display_name))) core_path, display_name, sizeof(display_name)))
menu_list_set_alt_at_offset(info->list, i, display_name); menu_list_set_alt_at_offset(info->list, i, display_name);
} }
@ -2516,7 +2515,7 @@ int menu_displaylist_push_list(menu_displaylist_info_t *info, unsigned type)
{ {
const core_info_t *core_info = NULL; const core_info_t *core_info = NULL;
core_info_list_get_supported_cores(global->core_info, core_info_list_get_supported_cores(global->core_info.list,
menu->deferred_path, &core_info, &list_size); menu->deferred_path, &core_info, &list_size);
if (list_size <= 0) if (list_size <= 0)

View File

@ -2268,7 +2268,7 @@ static void general_write_handler(void *data)
break; break;
case MENU_LABEL_LOG_VERBOSITY: case MENU_LABEL_LOG_VERBOSITY:
global->verbosity = *setting->value.boolean; global->verbosity = *setting->value.boolean;
global->has_set_verbosity = *setting->value.boolean; global->has_set.verbosity = *setting->value.boolean;
break; break;
case MENU_LABEL_VIDEO_SMOOTH: case MENU_LABEL_VIDEO_SMOOTH:
video_driver_set_filtering(1, settings->video.smooth); video_driver_set_filtering(1, settings->video.smooth);
@ -2306,25 +2306,25 @@ static void general_write_handler(void *data)
break; break;
case MENU_LABEL_NETPLAY_IP_ADDRESS: case MENU_LABEL_NETPLAY_IP_ADDRESS:
#ifdef HAVE_NETPLAY #ifdef HAVE_NETPLAY
global->has_set_netplay_ip_address = (setting->value.string[0] != '\0'); global->has_set.netplay_ip_address = (setting->value.string[0] != '\0');
#endif #endif
break; break;
case MENU_LABEL_NETPLAY_MODE: case MENU_LABEL_NETPLAY_MODE:
#ifdef HAVE_NETPLAY #ifdef HAVE_NETPLAY
if (!global->netplay_is_client) if (!global->netplay.is_client)
*global->netplay_server = '\0'; *global->netplay.server = '\0';
global->has_set_netplay_mode = true; global->has_set.netplay_mode = true;
#endif #endif
break; break;
case MENU_LABEL_NETPLAY_SPECTATOR_MODE_ENABLE: case MENU_LABEL_NETPLAY_SPECTATOR_MODE_ENABLE:
#ifdef HAVE_NETPLAY #ifdef HAVE_NETPLAY
if (global->netplay_is_spectate) if (global->netplay.is_spectate)
*global->netplay_server = '\0'; *global->netplay.server = '\0';
#endif #endif
break; break;
case MENU_LABEL_NETPLAY_DELAY_FRAMES: case MENU_LABEL_NETPLAY_DELAY_FRAMES:
#ifdef HAVE_NETPLAY #ifdef HAVE_NETPLAY
global->has_set_netplay_delay_frames = (global->netplay_sync_frames > 0); global->has_set.netplay_delay_frames = (global->netplay.sync_frames > 0);
#endif #endif
break; break;
} }
@ -2501,7 +2501,7 @@ static bool setting_append_list_main_menu_options(
START_GROUP(group_info,main_menu, parent_group); START_GROUP(group_info,main_menu, parent_group);
START_SUB_GROUP(list, list_info, "State", group_info.name, subgroup_info, parent_group); START_SUB_GROUP(list, list_info, "State", group_info.name, subgroup_info, parent_group);
if (global->main_is_init && (global->core_type != CORE_TYPE_DUMMY)) if (global->inited.main && (global->inited.core.type != CORE_TYPE_DUMMY))
{ {
CONFIG_ACTION( CONFIG_ACTION(
menu_hash_to_str(MENU_LABEL_CONTENT_SETTINGS), menu_hash_to_str(MENU_LABEL_CONTENT_SETTINGS),
@ -4633,7 +4633,7 @@ static bool setting_append_list_overlay_options(
settings->input.overlay, settings->input.overlay,
menu_hash_to_str(MENU_LABEL_OVERLAY_PRESET), menu_hash_to_str(MENU_LABEL_OVERLAY_PRESET),
menu_hash_to_str(MENU_LABEL_VALUE_OVERLAY_PRESET), menu_hash_to_str(MENU_LABEL_VALUE_OVERLAY_PRESET),
global->overlay_dir, global->dir.overlay,
group_info.name, group_info.name,
subgroup_info.name, subgroup_info.name,
parent_group, parent_group,
@ -4681,7 +4681,7 @@ static bool setting_append_list_overlay_options(
settings->osk.overlay, settings->osk.overlay,
menu_hash_to_str(MENU_LABEL_KEYBOARD_OVERLAY_PRESET), menu_hash_to_str(MENU_LABEL_KEYBOARD_OVERLAY_PRESET),
menu_hash_to_str(MENU_LABEL_VALUE_KEYBOARD_OVERLAY_PRESET), menu_hash_to_str(MENU_LABEL_VALUE_KEYBOARD_OVERLAY_PRESET),
global->osk_overlay_dir, global->dir.osk_overlay,
group_info.name, group_info.name,
subgroup_info.name, subgroup_info.name,
parent_group, parent_group,
@ -5243,7 +5243,7 @@ static bool setting_append_list_netplay_options(
START_SUB_GROUP(list, list_info, "Netplay", group_info.name, subgroup_info, parent_group); START_SUB_GROUP(list, list_info, "Netplay", group_info.name, subgroup_info, parent_group);
CONFIG_BOOL( CONFIG_BOOL(
global->netplay_enable, global->netplay.enable,
menu_hash_to_str(MENU_LABEL_NETPLAY_ENABLE), menu_hash_to_str(MENU_LABEL_NETPLAY_ENABLE),
menu_hash_to_str(MENU_LABEL_VALUE_NETPLAY_ENABLE), menu_hash_to_str(MENU_LABEL_VALUE_NETPLAY_ENABLE),
false, false,
@ -5269,7 +5269,7 @@ static bool setting_append_list_netplay_options(
general_read_handler); general_read_handler);
CONFIG_STRING( CONFIG_STRING(
global->netplay_server, global->netplay.server,
menu_hash_to_str(MENU_LABEL_NETPLAY_IP_ADDRESS), menu_hash_to_str(MENU_LABEL_NETPLAY_IP_ADDRESS),
menu_hash_to_str(MENU_LABEL_VALUE_NETPLAY_IP_ADDRESS), menu_hash_to_str(MENU_LABEL_VALUE_NETPLAY_IP_ADDRESS),
"", "",
@ -5281,7 +5281,7 @@ static bool setting_append_list_netplay_options(
settings_data_list_current_add_flags(list, list_info, SD_FLAG_ALLOW_INPUT); settings_data_list_current_add_flags(list, list_info, SD_FLAG_ALLOW_INPUT);
CONFIG_BOOL( CONFIG_BOOL(
global->netplay_is_client, global->netplay.is_client,
menu_hash_to_str(MENU_LABEL_NETPLAY_MODE), menu_hash_to_str(MENU_LABEL_NETPLAY_MODE),
menu_hash_to_str(MENU_LABEL_VALUE_NETPLAY_MODE), menu_hash_to_str(MENU_LABEL_VALUE_NETPLAY_MODE),
false, false,
@ -5294,7 +5294,7 @@ static bool setting_append_list_netplay_options(
general_read_handler); general_read_handler);
CONFIG_BOOL( CONFIG_BOOL(
global->netplay_is_spectate, global->netplay.is_spectate,
menu_hash_to_str(MENU_LABEL_NETPLAY_SPECTATOR_MODE_ENABLE), menu_hash_to_str(MENU_LABEL_NETPLAY_SPECTATOR_MODE_ENABLE),
menu_hash_to_str(MENU_LABEL_VALUE_NETPLAY_SPECTATOR_MODE_ENABLE), menu_hash_to_str(MENU_LABEL_VALUE_NETPLAY_SPECTATOR_MODE_ENABLE),
false, false,
@ -5307,7 +5307,7 @@ static bool setting_append_list_netplay_options(
general_read_handler); general_read_handler);
CONFIG_UINT( CONFIG_UINT(
global->netplay_sync_frames, global->netplay.sync_frames,
menu_hash_to_str(MENU_LABEL_NETPLAY_DELAY_FRAMES), menu_hash_to_str(MENU_LABEL_NETPLAY_DELAY_FRAMES),
menu_hash_to_str(MENU_LABEL_VALUE_NETPLAY_DELAY_FRAMES), menu_hash_to_str(MENU_LABEL_VALUE_NETPLAY_DELAY_FRAMES),
0, 0,
@ -5320,7 +5320,7 @@ static bool setting_append_list_netplay_options(
settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED);
CONFIG_UINT( CONFIG_UINT(
global->netplay_port, global->netplay.port,
menu_hash_to_str(MENU_LABEL_NETPLAY_TCP_UDP_PORT), menu_hash_to_str(MENU_LABEL_NETPLAY_TCP_UDP_PORT),
menu_hash_to_str(MENU_LABEL_VALUE_NETPLAY_TCP_UDP_PORT), menu_hash_to_str(MENU_LABEL_VALUE_NETPLAY_TCP_UDP_PORT),
RARCH_DEFAULT_PORT, RARCH_DEFAULT_PORT,
@ -5691,7 +5691,7 @@ static bool setting_append_list_directory_options(
settings->libretro_directory, settings->libretro_directory,
menu_hash_to_str(MENU_LABEL_LIBRETRO_DIR_PATH), menu_hash_to_str(MENU_LABEL_LIBRETRO_DIR_PATH),
menu_hash_to_str(MENU_LABEL_VALUE_LIBRETRO_DIR_PATH), menu_hash_to_str(MENU_LABEL_VALUE_LIBRETRO_DIR_PATH),
g_defaults.core_dir, g_defaults.dir.core,
menu_hash_to_str(MENU_VALUE_DIRECTORY_NONE), menu_hash_to_str(MENU_VALUE_DIRECTORY_NONE),
group_info.name, group_info.name,
subgroup_info.name, subgroup_info.name,
@ -5708,7 +5708,7 @@ static bool setting_append_list_directory_options(
settings->libretro_info_path, settings->libretro_info_path,
menu_hash_to_str(MENU_LABEL_LIBRETRO_INFO_PATH), menu_hash_to_str(MENU_LABEL_LIBRETRO_INFO_PATH),
menu_hash_to_str(MENU_LABEL_VALUE_LIBRETRO_INFO_PATH), menu_hash_to_str(MENU_LABEL_VALUE_LIBRETRO_INFO_PATH),
g_defaults.core_info_dir, g_defaults.dir.core_info,
menu_hash_to_str(MENU_VALUE_DIRECTORY_NONE), menu_hash_to_str(MENU_VALUE_DIRECTORY_NONE),
group_info.name, group_info.name,
subgroup_info.name, subgroup_info.name,
@ -5807,7 +5807,7 @@ static bool setting_append_list_directory_options(
settings->video.shader_dir, settings->video.shader_dir,
menu_hash_to_str(MENU_LABEL_VIDEO_SHADER_DIR), menu_hash_to_str(MENU_LABEL_VIDEO_SHADER_DIR),
menu_hash_to_str(MENU_LABEL_VALUE_VIDEO_SHADER_DIR), menu_hash_to_str(MENU_LABEL_VALUE_VIDEO_SHADER_DIR),
g_defaults.shader_dir, g_defaults.dir.shader,
menu_hash_to_str(MENU_VALUE_DIRECTORY_DEFAULT), menu_hash_to_str(MENU_VALUE_DIRECTORY_DEFAULT),
group_info.name, group_info.name,
subgroup_info.name, subgroup_info.name,
@ -5855,10 +5855,10 @@ static bool setting_append_list_directory_options(
} }
#ifdef HAVE_OVERLAY #ifdef HAVE_OVERLAY
CONFIG_DIR( CONFIG_DIR(
global->overlay_dir, global->dir.overlay,
menu_hash_to_str(MENU_LABEL_OVERLAY_DIRECTORY), menu_hash_to_str(MENU_LABEL_OVERLAY_DIRECTORY),
menu_hash_to_str(MENU_LABEL_VALUE_OVERLAY_DIRECTORY), menu_hash_to_str(MENU_LABEL_VALUE_OVERLAY_DIRECTORY),
g_defaults.overlay_dir, g_defaults.dir.overlay,
menu_hash_to_str(MENU_VALUE_DIRECTORY_DEFAULT), menu_hash_to_str(MENU_VALUE_DIRECTORY_DEFAULT),
group_info.name, group_info.name,
subgroup_info.name, subgroup_info.name,
@ -5871,10 +5871,10 @@ static bool setting_append_list_directory_options(
SD_FLAG_ALLOW_EMPTY | SD_FLAG_PATH_DIR | SD_FLAG_BROWSER_ACTION); SD_FLAG_ALLOW_EMPTY | SD_FLAG_PATH_DIR | SD_FLAG_BROWSER_ACTION);
CONFIG_DIR( CONFIG_DIR(
global->osk_overlay_dir, global->dir.osk_overlay,
menu_hash_to_str(MENU_LABEL_OSK_OVERLAY_DIRECTORY), menu_hash_to_str(MENU_LABEL_OSK_OVERLAY_DIRECTORY),
menu_hash_to_str(MENU_LABEL_VALUE_OSK_OVERLAY_DIRECTORY), menu_hash_to_str(MENU_LABEL_VALUE_OSK_OVERLAY_DIRECTORY),
g_defaults.osk_overlay_dir, g_defaults.dir.osk_overlay,
menu_hash_to_str(MENU_VALUE_DIRECTORY_DEFAULT), menu_hash_to_str(MENU_VALUE_DIRECTORY_DEFAULT),
group_info.name, group_info.name,
subgroup_info.name, subgroup_info.name,
@ -5952,7 +5952,7 @@ static bool setting_append_list_directory_options(
SD_FLAG_ALLOW_EMPTY | SD_FLAG_PATH_DIR | SD_FLAG_BROWSER_ACTION); SD_FLAG_ALLOW_EMPTY | SD_FLAG_PATH_DIR | SD_FLAG_BROWSER_ACTION);
CONFIG_DIR( CONFIG_DIR(
global->savefile_dir, global->dir.savefile,
menu_hash_to_str(MENU_LABEL_SAVEFILE_DIRECTORY), menu_hash_to_str(MENU_LABEL_SAVEFILE_DIRECTORY),
menu_hash_to_str(MENU_LABEL_VALUE_SAVEFILE_DIRECTORY), menu_hash_to_str(MENU_LABEL_VALUE_SAVEFILE_DIRECTORY),
"", "",
@ -5968,7 +5968,7 @@ static bool setting_append_list_directory_options(
SD_FLAG_ALLOW_EMPTY | SD_FLAG_PATH_DIR | SD_FLAG_BROWSER_ACTION); SD_FLAG_ALLOW_EMPTY | SD_FLAG_PATH_DIR | SD_FLAG_BROWSER_ACTION);
CONFIG_DIR( CONFIG_DIR(
global->savestate_dir, global->dir.savestate,
menu_hash_to_str(MENU_LABEL_SAVESTATE_DIRECTORY), menu_hash_to_str(MENU_LABEL_SAVESTATE_DIRECTORY),
menu_hash_to_str(MENU_LABEL_VALUE_SAVESTATE_DIRECTORY), menu_hash_to_str(MENU_LABEL_VALUE_SAVESTATE_DIRECTORY),
"", "",
@ -6115,7 +6115,7 @@ static bool setting_append_list_input_player_options(
if ( if (
settings->input.input_descriptor_label_show settings->input.input_descriptor_label_show
&& (i < RARCH_FIRST_META_KEY) && (i < RARCH_FIRST_META_KEY)
&& (global->has_set_input_descriptors) && (global->has_set.input_descriptors)
&& (i != RARCH_TURBO_ENABLE) && (i != RARCH_TURBO_ENABLE)
) )
{ {

View File

@ -47,11 +47,11 @@ void menu_shader_manager_init(menu_handle_t *menu)
shader = (struct video_shader*)menu->shader; shader = (struct video_shader*)menu->shader;
if (*global->core_specific_config_path if (*global->path.core_specific_config
&& settings->core_specific_config) && settings->core_specific_config)
config_path = global->core_specific_config_path; config_path = global->path.core_specific_config;
else if (*global->config_path) else if (*global->path.config)
config_path = global->config_path; config_path = global->path.config;
/* In a multi-config setting, we can't have /* In a multi-config setting, we can't have
* conflicts on menu.cgp/menu.glslp. */ * conflicts on menu.cgp/menu.glslp. */
@ -236,9 +236,9 @@ void menu_shader_manager_save_preset(
strlcpy(buffer, conf_path, sizeof(buffer)); strlcpy(buffer, conf_path, sizeof(buffer));
} }
if (*global->config_path) if (*global->path.config)
fill_pathname_basedir(config_directory, fill_pathname_basedir(config_directory,
global->config_path, sizeof(config_directory)); global->path.config, sizeof(config_directory));
dirs[0] = settings->video.shader_dir; dirs[0] = settings->video.shader_dir;
dirs[1] = settings->menu_config_directory; dirs[1] = settings->menu_config_directory;

View File

@ -129,7 +129,7 @@ void menu_video_frame_background(
menu_display_set_viewport(); menu_display_set_viewport();
if ((settings->menu.pause_libretro if ((settings->menu.pause_libretro
|| !global->main_is_init || (global->core_type == CORE_TYPE_DUMMY)) || !global->inited.main || (global->inited.core.type == CORE_TYPE_DUMMY))
&& !force_transparency && !force_transparency
&& texture) && texture)
coords.color = color; coords.color = color;

View File

@ -1655,7 +1655,7 @@ bool init_netplay(void)
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
global_t *global = global_get_ptr(); global_t *global = global_get_ptr();
if (!global->netplay_enable) if (!global->netplay.enable)
return false; return false;
if (global->bsv.movie_start_playback) if (global->bsv.movie_start_playback)
@ -1666,24 +1666,24 @@ bool init_netplay(void)
retro_set_default_callbacks(&cbs); retro_set_default_callbacks(&cbs);
if (*global->netplay_server) if (*global->netplay.server)
{ {
RARCH_LOG("Connecting to netplay host...\n"); RARCH_LOG("Connecting to netplay host...\n");
global->netplay_is_client = true; global->netplay.is_client = true;
} }
else else
RARCH_LOG("Waiting for client...\n"); RARCH_LOG("Waiting for client...\n");
driver->netplay_data = (netplay_t*)netplay_new( driver->netplay_data = (netplay_t*)netplay_new(
global->netplay_is_client ? global->netplay_server : NULL, global->netplay.is_client ? global->netplay.server : NULL,
global->netplay_port ? global->netplay_port : RARCH_DEFAULT_PORT, global->netplay.port ? global->netplay.port : RARCH_DEFAULT_PORT,
global->netplay_sync_frames, &cbs, global->netplay_is_spectate, global->netplay.sync_frames, &cbs, global->netplay.is_spectate,
settings->username); settings->username);
if (driver->netplay_data) if (driver->netplay_data)
return true; return true;
global->netplay_is_client = false; global->netplay.is_client = false;
RARCH_WARN("%s\n", msg_hash_to_str(MSG_NETPLAY_FAILED)); RARCH_WARN("%s\n", msg_hash_to_str(MSG_NETPLAY_FAILED));
rarch_main_msg_queue_push_new( rarch_main_msg_queue_push_new(

20
patch.c
View File

@ -518,42 +518,42 @@ 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(); global_t *global = global_get_ptr();
bool allow_bps = !global->ups_pref && !global->ips_pref; bool allow_bps = !global->patch.ups_pref && !global->patch.ips_pref;
if (!allow_bps) if (!allow_bps)
return false; return false;
if (global->bps_name[0] == '\0') if (global->name.bps[0] == '\0')
return false; return false;
return apply_patch_content(buf, size, "BPS", global->bps_name, return apply_patch_content(buf, size, "BPS", global->name.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(); global_t *global = global_get_ptr();
bool allow_ups = !global->bps_pref && !global->ips_pref; bool allow_ups = !global->patch.bps_pref && !global->patch.ips_pref;
if (!allow_ups) if (!allow_ups)
return false; return false;
if (global->ups_name[0] == '\0') if (global->name.ups[0] == '\0')
return false; return false;
return apply_patch_content(buf, size, "UPS", global->ups_name, return apply_patch_content(buf, size, "UPS", global->name.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(); global_t *global = global_get_ptr();
bool allow_ips = !global->ups_pref && !global->bps_pref; bool allow_ips = !global->patch.ups_pref && !global->patch.bps_pref;
if (!allow_ips) if (!allow_ips)
return false; return false;
if (global->ips_name[0] == '\0') if (global->name.ips[0] == '\0')
return false; return false;
return apply_patch_content(buf, size, "IPS", global->ips_name, return apply_patch_content(buf, size, "IPS", global->name.ips,
ips_apply_patch); ips_apply_patch);
} }
@ -569,7 +569,7 @@ void patch_content(uint8_t **buf, ssize_t *size)
{ {
global_t *global = global_get_ptr(); global_t *global = global_get_ptr();
if (global->ips_pref + global->bps_pref + global->ups_pref > 1) if (global->patch.ips_pref + global->patch.bps_pref + global->patch.ups_pref > 1)
{ {
RARCH_WARN("Several patches are explicitly defined, ignoring all ...\n"); RARCH_WARN("Several patches are explicitly defined, ignoring all ...\n");
return; return;

View File

@ -299,7 +299,7 @@ bool recording_init(void)
if (!global->record.enable) if (!global->record.enable)
return false; return false;
if (global->core_type == CORE_TYPE_DUMMY) if (global->inited.core.type == CORE_TYPE_DUMMY)
{ {
RARCH_WARN(msg_hash_to_str(MSG_USING_LIBRETRO_DUMMY_CORE_RECORDING_SKIPPED)); RARCH_WARN(msg_hash_to_str(MSG_USING_LIBRETRO_DUMMY_CORE_RECORDING_SKIPPED));
return false; return false;

View File

@ -245,8 +245,8 @@ static void set_basename(const char *path)
char *dst = NULL; char *dst = NULL;
global_t *global = global_get_ptr(); global_t *global = global_get_ptr();
strlcpy(global->fullpath, path, sizeof(global->fullpath)); strlcpy(global->path.fullpath, path, sizeof(global->path.fullpath));
strlcpy(global->basename, path, sizeof(global->basename)); strlcpy(global->name.base, path, sizeof(global->name.base));
#ifdef HAVE_COMPRESSION #ifdef HAVE_COMPRESSION
/* Removing extension is a bit tricky for compressed files. /* Removing extension is a bit tricky for compressed files.
@ -268,11 +268,11 @@ static void set_basename(const char *path)
* directory then and the name of srm and states are meaningful. * directory then and the name of srm and states are meaningful.
* *
*/ */
path_basedir(global->basename); path_basedir(global->name.base);
fill_pathname_dir(global->basename, path, "", sizeof(global->basename)); fill_pathname_dir(global->name.base, path, "", sizeof(global->name.base));
#endif #endif
if ((dst = strrchr(global->basename, '.'))) if ((dst = strrchr(global->name.base, '.')))
*dst = '\0'; *dst = '\0';
} }
@ -297,17 +297,17 @@ static void set_special_paths(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->has_set_state_path) if (!global->has_set.state_path)
fill_pathname_noext(global->savestate_name, global->basename, fill_pathname_noext(global->name.savestate, global->name.base,
".state", sizeof(global->savestate_name)); ".state", sizeof(global->name.savestate));
if (path_is_directory(global->savestate_name)) if (path_is_directory(global->name.savestate))
{ {
fill_pathname_dir(global->savestate_name, global->basename, fill_pathname_dir(global->name.savestate, global->name.base,
".state", sizeof(global->savestate_name)); ".state", sizeof(global->name.savestate));
RARCH_LOG("%s \"%s\".\n", RARCH_LOG("%s \"%s\".\n",
msg_hash_to_str(MSG_REDIRECTING_SAVESTATE_TO), msg_hash_to_str(MSG_REDIRECTING_SAVESTATE_TO),
global->savestate_name); global->name.savestate);
} }
/* If this is already set, /* If this is already set,
@ -337,76 +337,79 @@ void set_paths_redirect(const char *path)
(global_library_name_hash != MENU_VALUE_NO_CORE)) (global_library_name_hash != MENU_VALUE_NO_CORE))
{ {
/* per-core saves: append the library_name to the save location */ /* per-core saves: append the library_name to the save location */
if (settings->sort_savefiles_enable && global->savefile_dir[0] != '\0') if (settings->sort_savefiles_enable && global->dir.savefile[0] != '\0')
{ {
strlcpy(orig_savefile_dir,global->savefile_dir,sizeof(global->savefile_dir)); strlcpy(orig_savefile_dir,global->dir.savefile,
sizeof(orig_savefile_dir));
fill_pathname_dir( fill_pathname_dir(
global->savefile_dir, global->dir.savefile,
global->savefile_dir, global->dir.savefile,
info->info.library_name, info->info.library_name,
sizeof(global->savefile_dir)); sizeof(global->dir.savefile));
/* If path doesn't exist, try to create it, /* If path doesn't exist, try to create it,
* if everything fails revert to the original path. */ * if everything fails revert to the original path. */
if(!path_is_directory(global->savefile_dir) && global->savestate_dir[0] != '\0') if(!path_is_directory(global->dir.savefile) && global->dir.savestate[0] != '\0')
if(!path_mkdir(global->savefile_dir)) if(!path_mkdir(global->dir.savefile))
strlcpy(global->savefile_dir, strlcpy(global->dir.savefile,
orig_savefile_dir, orig_savefile_dir,
sizeof(global->savefile_dir)); sizeof(global->dir.savefile));
} }
/* per-core states: append the library_name to the save location */ /* per-core states: append the library_name to the save location */
if (settings->sort_savestates_enable && global->savefile_dir[0] != '\0') if (settings->sort_savestates_enable && global->dir.savefile[0] != '\0')
{ {
strlcpy(orig_savestate_dir, strlcpy(orig_savestate_dir,
global->savestate_dir, global->dir.savestate,
sizeof(global->savestate_dir)); sizeof(orig_savestate_dir));
fill_pathname_dir(global->savestate_dir, fill_pathname_dir(global->dir.savestate,
global->savestate_dir, global->dir.savestate,
info->info.library_name, info->info.library_name,
sizeof(global->savestate_dir)); sizeof(global->dir.savestate));
/* If path doesn't exist, try to create it. /* If path doesn't exist, try to create it.
* If everything fails, revert to the original path. */ * If everything fails, revert to the original path. */
if(!path_is_directory(global->savestate_dir)) if(!path_is_directory(global->dir.savestate))
if(!path_mkdir(global->savestate_dir)) if(!path_mkdir(global->dir.savestate))
strlcpy(global->savestate_dir, strlcpy(global->dir.savestate,
orig_savestate_dir, orig_savestate_dir,
sizeof(global->savestate_dir)); sizeof(global->dir.savestate));
} }
} }
if(path_is_directory(global->savefile_dir)) if(path_is_directory(global->dir.savefile))
strlcpy(global->savefile_name,global->savefile_dir,sizeof(global->savefile_dir)); strlcpy(global->name.savefile, global->dir.savefile,
sizeof(global->name.savefile));
if(path_is_directory(global->savestate_dir)) if(path_is_directory(global->dir.savestate))
strlcpy(global->savestate_name,global->savestate_dir,sizeof(global->savestate_dir)); strlcpy(global->name.savestate, global->dir.savestate,
sizeof(global->name.savestate));
if (path_is_directory(global->savefile_name)) if (path_is_directory(global->name.savefile))
{ {
fill_pathname_dir(global->savefile_name, global->basename, fill_pathname_dir(global->name.savefile, global->name.base,
".srm", sizeof(global->savefile_name)); ".srm", sizeof(global->name.savefile));
RARCH_LOG("%s \"%s\".\n", RARCH_LOG("%s \"%s\".\n",
msg_hash_to_str(MSG_REDIRECTING_SAVEFILE_TO), msg_hash_to_str(MSG_REDIRECTING_SAVEFILE_TO),
global->savefile_name); global->name.savefile);
} }
if (path_is_directory(global->savestate_name)) if (path_is_directory(global->name.savestate))
{ {
fill_pathname_dir(global->savestate_name, global->basename, fill_pathname_dir(global->name.savestate, global->name.base,
".state", sizeof(global->savestate_name)); ".state", sizeof(global->name.savestate));
RARCH_LOG("%s \"%s\".\n", RARCH_LOG("%s \"%s\".\n",
msg_hash_to_str(MSG_REDIRECTING_SAVESTATE_TO), msg_hash_to_str(MSG_REDIRECTING_SAVESTATE_TO),
global->savestate_name); global->name.savestate);
} }
if (path_is_directory(global->cheatfile_name)) if (path_is_directory(global->name.cheatfile))
{ {
fill_pathname_dir(global->cheatfile_name, global->basename, fill_pathname_dir(global->name.cheatfile, global->name.base,
".state", sizeof(global->cheatfile_name)); ".state", sizeof(global->name.cheatfile));
RARCH_LOG("%s \"%s\".\n", RARCH_LOG("%s \"%s\".\n",
msg_hash_to_str(MSG_REDIRECTING_CHEATFILE_TO), msg_hash_to_str(MSG_REDIRECTING_CHEATFILE_TO),
global->cheatfile_name); global->name.cheatfile);
} }
} }
@ -417,14 +420,14 @@ void rarch_set_paths(const char *path)
set_basename(path); set_basename(path);
if (!global->has_set_save_path) if (!global->has_set.save_path)
fill_pathname_noext(global->savefile_name, global->basename, fill_pathname_noext(global->name.savefile, global->name.base,
".srm", sizeof(global->savefile_name)); ".srm", sizeof(global->name.savefile));
if (!global->has_set_state_path) if (!global->has_set.state_path)
fill_pathname_noext(global->savestate_name, global->basename, fill_pathname_noext(global->name.savestate, global->name.base,
".state", sizeof(global->savestate_name)); ".state", sizeof(global->name.savestate));
fill_pathname_noext(global->cheatfile_name, global->basename, fill_pathname_noext(global->name.cheatfile, global->name.base,
".cht", sizeof(global->cheatfile_name)); ".cht", sizeof(global->name.cheatfile));
set_paths_redirect(path); set_paths_redirect(path);
} }
@ -555,36 +558,36 @@ static void parse_input(int argc, char *argv[])
{ NULL, 0, NULL, 0 } { NULL, 0, NULL, 0 }
}; };
global->libretro_no_content = false; global->inited.core.no_content = false;
global->core_type = CORE_TYPE_PLAIN; global->inited.core.type = CORE_TYPE_PLAIN;
*global->subsystem = '\0'; *global->subsystem = '\0';
global->has_set_save_path = false; global->has_set.save_path = false;
global->has_set_state_path = false; global->has_set.state_path = false;
global->has_set_libretro = false; global->has_set.libretro = false;
global->has_set_libretro_directory = false; global->has_set.libretro_directory = false;
global->has_set_verbosity = false; global->has_set.verbosity = false;
global->has_set_netplay_mode = false; global->has_set.netplay_mode = false;
global->has_set_username = false; global->has_set.username = false;
global->has_set_netplay_ip_address = false; global->has_set.netplay_ip_address = false;
global->has_set_netplay_delay_frames = false; global->has_set.netplay_delay_frames = false;
global->has_set_netplay_ip_port = false; global->has_set.netplay_ip_port = false;
global->has_set_ups_pref = false; global->has_set.ups_pref = false;
global->has_set_bps_pref = false; global->has_set.bps_pref = false;
global->has_set_ips_pref = false; global->has_set.ips_pref = false;
global->ups_pref = false; global->patch.ups_pref = false;
global->bps_pref = false; global->patch.bps_pref = false;
global->ips_pref = false; global->patch.ips_pref = false;
*global->ups_name = '\0'; *global->name.ups = '\0';
*global->bps_name = '\0'; *global->name.bps = '\0';
*global->ips_name = '\0'; *global->name.ips = '\0';
global->overrides_active = false; global->overrides_active = false;
if (argc < 2) if (argc < 2)
{ {
global->core_type = CORE_TYPE_DUMMY; global->inited.core.type = CORE_TYPE_DUMMY;
return; return;
} }
@ -627,7 +630,7 @@ static void parse_input(int argc, char *argv[])
rarch_fail(1, "parse_input()"); rarch_fail(1, "parse_input()");
} }
settings->input.libretro_device[port - 1] = id; settings->input.libretro_device[port - 1] = id;
global->has_set_libretro_device[port - 1] = true; global->has_set.libretro_device[port - 1] = true;
break; break;
} }
@ -640,13 +643,13 @@ static void parse_input(int argc, char *argv[])
rarch_fail(1, "parse_input()"); rarch_fail(1, "parse_input()");
} }
settings->input.libretro_device[port - 1] = RETRO_DEVICE_ANALOG; settings->input.libretro_device[port - 1] = RETRO_DEVICE_ANALOG;
global->has_set_libretro_device[port - 1] = true; global->has_set.libretro_device[port - 1] = true;
break; break;
case 's': case 's':
strlcpy(global->savefile_name, optarg, strlcpy(global->name.savefile, optarg,
sizeof(global->savefile_name)); sizeof(global->name.savefile));
global->has_set_save_path = true; global->has_set.save_path = true;
break; break;
case 'f': case 'f':
@ -654,14 +657,14 @@ static void parse_input(int argc, char *argv[])
break; break;
case 'S': case 'S':
strlcpy(global->savestate_name, optarg, strlcpy(global->name.savestate, optarg,
sizeof(global->savestate_name)); sizeof(global->name.savestate));
global->has_set_state_path = true; global->has_set.state_path = true;
break; break;
case 'v': case 'v':
global->verbosity = true; global->verbosity = true;
global->has_set_verbosity = true; global->has_set.verbosity = true;
break; break;
case 'N': case 'N':
@ -673,12 +676,12 @@ static void parse_input(int argc, char *argv[])
rarch_fail(1, "parse_input()"); rarch_fail(1, "parse_input()");
} }
settings->input.libretro_device[port - 1] = RETRO_DEVICE_NONE; settings->input.libretro_device[port - 1] = RETRO_DEVICE_NONE;
global->has_set_libretro_device[port - 1] = true; global->has_set.libretro_device[port - 1] = true;
break; break;
case 'c': case 'c':
strlcpy(global->config_path, optarg, strlcpy(global->path.config, optarg,
sizeof(global->config_path)); sizeof(global->path.config));
break; break;
case 'r': case 'r':
@ -694,15 +697,15 @@ static void parse_input(int argc, char *argv[])
*settings->libretro = '\0'; *settings->libretro = '\0';
strlcpy(settings->libretro_directory, optarg, strlcpy(settings->libretro_directory, optarg,
sizeof(settings->libretro_directory)); sizeof(settings->libretro_directory));
global->has_set_libretro = true; global->has_set.libretro = true;
global->has_set_libretro_directory = true; global->has_set.libretro_directory = true;
RARCH_WARN("Using old --libretro behavior. Setting libretro_directory to \"%s\" instead.\n", optarg); RARCH_WARN("Using old --libretro behavior. Setting libretro_directory to \"%s\" instead.\n", optarg);
} }
else else
{ {
strlcpy(settings->libretro, optarg, strlcpy(settings->libretro, optarg,
sizeof(settings->libretro)); sizeof(settings->libretro));
global->has_set_libretro = true; global->has_set.libretro = true;
} }
break; break;
#endif #endif
@ -717,13 +720,13 @@ static void parse_input(int argc, char *argv[])
case 'M': case 'M':
if (!strcmp(optarg, "noload-nosave")) if (!strcmp(optarg, "noload-nosave"))
{ {
global->sram_load_disable = true; global->sram.load_disable = true;
global->sram_save_disable = true; global->sram.save_disable = true;
} }
else if (!strcmp(optarg, "noload-save")) else if (!strcmp(optarg, "noload-save"))
global->sram_load_disable = true; global->sram.load_disable = true;
else if (!strcmp(optarg, "load-nosave")) else if (!strcmp(optarg, "load-nosave"))
global->sram_save_disable = true; global->sram.save_disable = true;
else if (strcmp(optarg, "load-save") != 0) else if (strcmp(optarg, "load-save") != 0)
{ {
RARCH_ERR("Invalid argument in --sram-mode.\n"); RARCH_ERR("Invalid argument in --sram-mode.\n");
@ -734,47 +737,47 @@ static void parse_input(int argc, char *argv[])
#ifdef HAVE_NETPLAY #ifdef HAVE_NETPLAY
case 'H': case 'H':
global->has_set_netplay_ip_address = true; global->has_set.netplay_ip_address = true;
global->netplay_enable = true; global->netplay.enable = true;
*global->netplay_server = '\0'; *global->netplay.server = '\0';
break; break;
case 'C': case 'C':
global->has_set_netplay_ip_address = true; global->has_set.netplay_ip_address = true;
global->netplay_enable = true; global->netplay.enable = true;
strlcpy(global->netplay_server, optarg, strlcpy(global->netplay.server, optarg,
sizeof(global->netplay_server)); sizeof(global->netplay.server));
break; break;
case 'F': case 'F':
global->netplay_sync_frames = strtol(optarg, NULL, 0); global->netplay.sync_frames = strtol(optarg, NULL, 0);
global->has_set_netplay_delay_frames = true; global->has_set.netplay_delay_frames = true;
break; break;
#endif #endif
case RA_OPT_BPS: case RA_OPT_BPS:
strlcpy(global->bps_name, optarg, strlcpy(global->name.bps, optarg,
sizeof(global->bps_name)); sizeof(global->name.bps));
global->bps_pref = true; global->patch.bps_pref = true;
global->has_set_bps_pref = true; global->has_set.bps_pref = true;
break; break;
case 'U': case 'U':
strlcpy(global->ups_name, optarg, strlcpy(global->name.ups, optarg,
sizeof(global->ups_name)); sizeof(global->name.ups));
global->ups_pref = true; global->patch.ups_pref = true;
global->has_set_ups_pref = true; global->has_set.ups_pref = true;
break; break;
case RA_OPT_IPS: case RA_OPT_IPS:
strlcpy(global->ips_name, optarg, strlcpy(global->name.ips, optarg,
sizeof(global->ips_name)); sizeof(global->name.ips));
global->ips_pref = true; global->patch.ips_pref = true;
global->has_set_ips_pref = true; global->has_set.ips_pref = true;
break; break;
case RA_OPT_NO_PATCH: case RA_OPT_NO_PATCH:
global->block_patch = true; global->patch.block_patch = true;
break; break;
case 'D': case 'D':
@ -784,23 +787,23 @@ static void parse_input(int argc, char *argv[])
break; break;
case RA_OPT_MENU: case RA_OPT_MENU:
global->core_type = CORE_TYPE_DUMMY; global->inited.core.type = CORE_TYPE_DUMMY;
break; break;
#ifdef HAVE_NETPLAY #ifdef HAVE_NETPLAY
case RA_OPT_PORT: case RA_OPT_PORT:
global->has_set_netplay_ip_port = true; global->has_set.netplay_ip_port = true;
global->netplay_port = strtoul(optarg, NULL, 0); global->netplay.port = strtoul(optarg, NULL, 0);
break; break;
case RA_OPT_SPECTATE: case RA_OPT_SPECTATE:
global->has_set_netplay_mode = true; global->has_set.netplay_mode = true;
global->netplay_is_spectate = true; global->netplay.is_spectate = true;
break; break;
#endif #endif
case RA_OPT_NICK: case RA_OPT_NICK:
global->has_set_username = true; global->has_set.username = true;
strlcpy(settings->username, optarg, strlcpy(settings->username, optarg,
sizeof(settings->username)); sizeof(settings->username));
break; break;
@ -815,8 +818,8 @@ static void parse_input(int argc, char *argv[])
#endif #endif
case RA_OPT_APPENDCONFIG: case RA_OPT_APPENDCONFIG:
strlcpy(global->append_config_path, optarg, strlcpy(global->path.append_config, optarg,
sizeof(global->append_config_path)); sizeof(global->path.append_config));
break; break;
case RA_OPT_SIZE: case RA_OPT_SIZE:
@ -872,7 +875,7 @@ static void parse_input(int argc, char *argv[])
} }
} }
if (global->core_type == CORE_TYPE_DUMMY) if (global->inited.core.type == CORE_TYPE_DUMMY)
{ {
if (optind < argc) if (optind < argc)
{ {
@ -885,19 +888,19 @@ static void parse_input(int argc, char *argv[])
else if (*global->subsystem && optind < argc) else if (*global->subsystem && optind < argc)
set_special_paths(argv + optind, argc - optind); set_special_paths(argv + optind, argc - optind);
else else
global->libretro_no_content = true; global->inited.core.no_content = true;
/* 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 (global->has_set_save_path && if (global->has_set.save_path &&
path_is_directory(global->savefile_name)) path_is_directory(global->name.savefile))
strlcpy(global->savefile_dir, global->savefile_name, strlcpy(global->dir.savefile, global->name.savefile,
sizeof(global->savefile_dir)); sizeof(global->dir.savefile));
if (global->has_set_state_path && if (global->has_set.state_path &&
path_is_directory(global->savestate_name)) path_is_directory(global->name.savestate))
strlcpy(global->savestate_dir, global->savestate_name, strlcpy(global->dir.savestate, global->name.savestate,
sizeof(global->savestate_dir)); sizeof(global->dir.savestate));
} }
static void rarch_init_savefile_paths(void) static void rarch_init_savefile_paths(void)
@ -926,7 +929,7 @@ static void rarch_init_savefile_paths(void)
global->subsystem_fullpaths ? global->subsystem_fullpaths ?
global->subsystem_fullpaths->size : 0); global->subsystem_fullpaths->size : 0);
bool use_sram_dir = path_is_directory(global->savefile_dir); bool use_sram_dir = path_is_directory(global->dir.savefile);
for (i = 0; i < num_content; i++) for (i = 0; i < num_content; i++)
{ {
@ -944,7 +947,7 @@ static void rarch_init_savefile_paths(void)
if (use_sram_dir) if (use_sram_dir)
{ {
/* Redirect content fullpath to save directory. */ /* Redirect content fullpath to save directory. */
strlcpy(path, global->savefile_dir, sizeof(path)); strlcpy(path, global->dir.savefile, sizeof(path));
fill_pathname_dir(path, fill_pathname_dir(path,
global->subsystem_fullpaths->elems[i].data, ext, global->subsystem_fullpaths->elems[i].data, ext,
sizeof(path)); sizeof(path));
@ -961,16 +964,16 @@ static void rarch_init_savefile_paths(void)
} }
/* Let other relevant paths be inferred from the main SRAM location. */ /* Let other relevant paths be inferred from the main SRAM location. */
if (!global->has_set_save_path) if (!global->has_set.save_path)
fill_pathname_noext(global->savefile_name, global->basename, ".srm", fill_pathname_noext(global->name.savefile, global->name.base, ".srm",
sizeof(global->savefile_name)); sizeof(global->name.savefile));
if (path_is_directory(global->savefile_name)) if (path_is_directory(global->name.savefile))
{ {
fill_pathname_dir(global->savefile_name, global->basename, ".srm", fill_pathname_dir(global->name.savefile, global->name.base, ".srm",
sizeof(global->savefile_name)); sizeof(global->name.savefile));
RARCH_LOG("%s \"%s\".\n", RARCH_LOG("%s \"%s\".\n",
msg_hash_to_str(MSG_REDIRECTING_SAVEFILE_TO), msg_hash_to_str(MSG_REDIRECTING_SAVEFILE_TO),
global->savefile_name); global->name.savefile);
} }
} }
else else
@ -979,12 +982,12 @@ static void rarch_init_savefile_paths(void)
char savefile_name_rtc[PATH_MAX_LENGTH] = {0}; char savefile_name_rtc[PATH_MAX_LENGTH] = {0};
attr.i = RETRO_MEMORY_SAVE_RAM; attr.i = RETRO_MEMORY_SAVE_RAM;
string_list_append(global->savefiles, global->savefile_name, attr); string_list_append(global->savefiles, global->name.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->savefile_name, ".rtc", sizeof(savefile_name_rtc)); global->name.savefile, ".rtc", sizeof(savefile_name_rtc));
string_list_append(global->savefiles, savefile_name_rtc, attr); string_list_append(global->savefiles, savefile_name_rtc, attr);
} }
} }
@ -994,21 +997,21 @@ void rarch_fill_pathnames(void)
global_t *global = global_get_ptr(); global_t *global = global_get_ptr();
rarch_init_savefile_paths(); rarch_init_savefile_paths();
fill_pathname(global->bsv.movie_path, global->savefile_name, "", strlcpy(global->bsv.movie_path, global->name.savefile,
sizeof(global->bsv.movie_path)); sizeof(global->bsv.movie_path));
if (!*global->basename) if (!*global->name.base)
return; return;
if (!*global->ups_name) if (!*global->name.ups)
fill_pathname_noext(global->ups_name, global->basename, ".ups", fill_pathname_noext(global->name.ups, global->name.base, ".ups",
sizeof(global->ups_name)); sizeof(global->name.ups));
if (!*global->bps_name) if (!*global->name.bps)
fill_pathname_noext(global->bps_name, global->basename, ".bps", fill_pathname_noext(global->name.bps, global->name.base, ".bps",
sizeof(global->bps_name)); sizeof(global->name.bps));
if (!*global->ips_name) if (!*global->name.ips)
fill_pathname_noext(global->ips_name, global->basename, ".ips", fill_pathname_noext(global->name.ips, global->name.base, ".ips",
sizeof(global->ips_name)); sizeof(global->name.ips));
} }
static bool init_state(void) static bool init_state(void)
@ -1029,7 +1032,7 @@ static void main_clear_state_drivers(void)
bool inited = false; bool inited = false;
if (!global) if (!global)
return; return;
inited = global->main_is_init; inited = global->inited.main;
if (!inited) if (!inited)
return; return;
@ -1181,8 +1184,8 @@ int rarch_main_init(int argc, char *argv[])
RARCH_ERR("Fatal error received in: \"%s\"\n", global->error_string); RARCH_ERR("Fatal error received in: \"%s\"\n", global->error_string);
return sjlj_ret; return sjlj_ret;
} }
global->error_in_init = true; global->inited.error = true;
global->log_file = stderr; global->log_file = stderr;
parse_input(argc, argv); parse_input(argc, argv);
if (global->verbosity) if (global->verbosity)
@ -1209,15 +1212,15 @@ int rarch_main_init(int argc, char *argv[])
if (settings && (settings->multimedia.builtin_mediaplayer_enable || if (settings && (settings->multimedia.builtin_mediaplayer_enable ||
settings->multimedia.builtin_imageviewer_enable)) settings->multimedia.builtin_imageviewer_enable))
{ {
switch (rarch_path_is_media_type(global->fullpath)) switch (rarch_path_is_media_type(global->path.fullpath))
{ {
case RARCH_CONTENT_MOVIE: case RARCH_CONTENT_MOVIE:
case RARCH_CONTENT_MUSIC: case RARCH_CONTENT_MUSIC:
if (settings->multimedia.builtin_mediaplayer_enable) if (settings->multimedia.builtin_mediaplayer_enable)
{ {
#ifdef HAVE_FFMPEG #ifdef HAVE_FFMPEG
global->has_set_libretro = false; global->has_set.libretro = false;
global->core_type = CORE_TYPE_FFMPEG; global->inited.core.type = CORE_TYPE_FFMPEG;
#endif #endif
} }
break; break;
@ -1225,8 +1228,8 @@ int rarch_main_init(int argc, char *argv[])
case RARCH_CONTENT_IMAGE: case RARCH_CONTENT_IMAGE:
if (settings->multimedia.builtin_imageviewer_enable) if (settings->multimedia.builtin_imageviewer_enable)
{ {
global->has_set_libretro = false; global->has_set.libretro = false;
global->core_type = CORE_TYPE_IMAGEVIEWER; global->inited.core.type = CORE_TYPE_IMAGEVIEWER;
} }
break; break;
#endif #endif
@ -1236,7 +1239,7 @@ int rarch_main_init(int argc, char *argv[])
} }
} }
init_libretro_sym(global->core_type); init_libretro_sym(global->inited.core.type);
rarch_system_info_init(); rarch_system_info_init();
init_drivers_pre(); init_drivers_pre();
@ -1278,14 +1281,14 @@ int rarch_main_init(int argc, char *argv[])
} }
#endif #endif
global->error_in_init = false; global->inited.error = false;
global->main_is_init = true; global->inited.main = true;
return 0; return 0;
error: error:
event_command(EVENT_CMD_CORE_DEINIT); event_command(EVENT_CMD_CORE_DEINIT);
global->main_is_init = false; global->inited.main = false;
return 1; return 1;
} }
@ -1476,7 +1479,7 @@ void rarch_main_deinit(void)
event_command(EVENT_CMD_NETPLAY_DEINIT); event_command(EVENT_CMD_NETPLAY_DEINIT);
event_command(EVENT_CMD_COMMAND_DEINIT); event_command(EVENT_CMD_COMMAND_DEINIT);
if (global->use_sram) if (global->sram.use)
event_command(EVENT_CMD_AUTOSAVE_DEINIT); event_command(EVENT_CMD_AUTOSAVE_DEINIT);
event_command(EVENT_CMD_RECORD_DEINIT); event_command(EVENT_CMD_RECORD_DEINIT);
@ -1494,7 +1497,7 @@ void rarch_main_deinit(void)
event_command(EVENT_CMD_SUBSYSTEM_FULLPATHS_DEINIT); event_command(EVENT_CMD_SUBSYSTEM_FULLPATHS_DEINIT);
event_command(EVENT_CMD_SAVEFILES_DEINIT); event_command(EVENT_CMD_SAVEFILES_DEINIT);
global->main_is_init = false; global->inited.main = false;
} }
/** /**
@ -1573,7 +1576,7 @@ int rarch_defer_core(core_info_list_t *core_info, const char *dir,
if (menu_label_hash == MENU_LABEL_LOAD_CONTENT) if (menu_label_hash == MENU_LABEL_LOAD_CONTENT)
{ {
info = (const core_info_t*)&global->core_info_current; info = (const core_info_t*)&global->core_info.current;
if (info) if (info)
{ {
@ -1589,7 +1592,7 @@ int rarch_defer_core(core_info_list_t *core_info, const char *dir,
if (supported != 1) if (supported != 1)
return 0; return 0;
strlcpy(global->fullpath, s, sizeof(global->fullpath)); strlcpy(global->path.fullpath, s, sizeof(global->path.fullpath));
if (path_file_exists(new_core_path)) if (path_file_exists(new_core_path))
strlcpy(settings->libretro, new_core_path, strlcpy(settings->libretro, new_core_path,
@ -1624,13 +1627,13 @@ bool rarch_replace_config(const char *path)
/* If config file to be replaced is the same as the /* If config file to be replaced is the same as the
* current config file, exit. */ * current config file, exit. */
if (!strcmp(path, global->config_path)) if (!strcmp(path, global->path.config))
return false; return false;
if (settings->config_save_on_exit && *global->config_path) if (settings->config_save_on_exit && *global->path.config)
config_save_file(global->config_path); config_save_file(global->path.config);
strlcpy(global->config_path, path, sizeof(global->config_path)); strlcpy(global->path.config, path, sizeof(global->path.config));
global->block_config_read = false; global->block_config_read = false;
*settings->libretro = '\0'; /* Load core in new config. */ *settings->libretro = '\0'; /* Load core in new config. */

View File

@ -423,7 +423,7 @@ static void do_state_check_menu_toggle(settings_t *settings, global_t *global)
{ {
if (menu_driver_alive()) if (menu_driver_alive())
{ {
if (global->main_is_init && (global->core_type != CORE_TYPE_DUMMY)) if (global->inited.main && (global->inited.core.type != CORE_TYPE_DUMMY))
rarch_main_set_state(RARCH_ACTION_STATE_MENU_RUNNING_FINISHED); rarch_main_set_state(RARCH_ACTION_STATE_MENU_RUNNING_FINISHED);
return; return;
} }
@ -459,7 +459,7 @@ static int do_pre_state_checks(settings_t *settings,
event_command(EVENT_CMD_GRAB_MOUSE_TOGGLE); event_command(EVENT_CMD_GRAB_MOUSE_TOGGLE);
#ifdef HAVE_MENU #ifdef HAVE_MENU
if (cmd->menu_pressed || (global->core_type == CORE_TYPE_DUMMY)) if (cmd->menu_pressed || (global->inited.core.type == CORE_TYPE_DUMMY))
do_state_check_menu_toggle(settings, global); do_state_check_menu_toggle(settings, global);
#endif #endif
@ -751,7 +751,7 @@ static INLINE retro_input_t input_keys_pressed(driver_t *driver,
if (!driver->input || !driver->input_data) if (!driver->input || !driver->input_data)
return 0; return 0;
global->turbo_count++; global->turbo.count++;
driver->block_libretro_input = check_block_hotkey(driver, driver->block_libretro_input = check_block_hotkey(driver,
settings, driver->input->key_pressed( settings, driver->input->key_pressed(
@ -764,13 +764,13 @@ static INLINE retro_input_t input_keys_pressed(driver_t *driver,
input_push_analog_dpad(settings->input.autoconf_binds[i], input_push_analog_dpad(settings->input.autoconf_binds[i],
settings->input.analog_dpad_mode[i]); settings->input.analog_dpad_mode[i]);
global->turbo_frame_enable[i] = 0; global->turbo.frame_enable[i] = 0;
} }
if (!driver->block_libretro_input) if (!driver->block_libretro_input)
{ {
for (i = 0; i < settings->input.max_users; i++) for (i = 0; i < settings->input.max_users; i++)
global->turbo_frame_enable[i] = input_driver_state(binds, global->turbo.frame_enable[i] = input_driver_state(binds,
i, RETRO_DEVICE_JOYPAD, 0, RARCH_TURBO_ENABLE); i, RETRO_DEVICE_JOYPAD, 0, RARCH_TURBO_ENABLE);
} }

179
runloop.h
View File

@ -74,45 +74,65 @@ typedef struct global
struct string_list *temporary_content; struct string_list *temporary_content;
core_info_list_t *core_info; struct
core_info_t *core_info_current; {
core_info_list_t *list;
core_info_t *current;
} core_info;
uint32_t content_crc; uint32_t content_crc;
char gb_rom_path[PATH_MAX_LENGTH]; struct
char bsx_rom_path[PATH_MAX_LENGTH]; {
char sufami_rom_path[2][PATH_MAX_LENGTH]; char gb_rom[PATH_MAX_LENGTH];
bool has_set_input_descriptors; char bsx_rom[PATH_MAX_LENGTH];
bool has_set_save_path; char sufami_rom[2][PATH_MAX_LENGTH];
bool has_set_state_path; /* Config associated with global "default" config. */
bool has_set_libretro_device[MAX_USERS]; char config[PATH_MAX_LENGTH];
bool has_set_libretro; char append_config[PATH_MAX_LENGTH];
bool has_set_libretro_directory; char input_config[PATH_MAX_LENGTH];
bool has_set_verbosity; #ifdef HAVE_FILE_LOGGER
char default_log[PATH_MAX_LENGTH];
#endif
char fullpath[PATH_MAX_LENGTH];
/* Config file associated with per-core configs. */
char core_specific_config[PATH_MAX_LENGTH];
} path;
bool has_set_netplay_mode; struct
bool has_set_username; {
bool has_set_netplay_ip_address; bool input_descriptors;
bool has_set_netplay_delay_frames; bool save_path;
bool has_set_netplay_ip_port; bool state_path;
bool libretro_device[MAX_USERS];
bool libretro;
bool libretro_directory;
bool verbosity;
bool netplay_mode;
bool username;
bool netplay_ip_address;
bool netplay_delay_frames;
bool netplay_ip_port;
bool ups_pref;
bool bps_pref;
bool ips_pref;
} has_set;
bool has_set_ups_pref;
bool has_set_bps_pref;
bool has_set_ips_pref;
bool overrides_active; bool overrides_active;
/* Config associated with global "default" config. */ struct
char config_path[PATH_MAX_LENGTH]; {
char append_config_path[PATH_MAX_LENGTH]; char base[PATH_MAX_LENGTH];
char input_config_path[PATH_MAX_LENGTH]; char savefile[PATH_MAX_LENGTH];
char savestate[PATH_MAX_LENGTH];
#ifdef HAVE_FILE_LOGGER char cheatfile[PATH_MAX_LENGTH];
char default_log_file[PATH_MAX_LENGTH]; char ups[PATH_MAX_LENGTH];
#endif char bps[PATH_MAX_LENGTH];
char ips[PATH_MAX_LENGTH];
char basename[PATH_MAX_LENGTH]; } name;
char fullpath[PATH_MAX_LENGTH];
/* A list of save types and associated paths for all content. */ /* A list of save types and associated paths for all content. */
struct string_list *savefiles; struct string_list *savefiles;
@ -121,26 +141,24 @@ typedef struct global
char subsystem[PATH_MAX_LENGTH]; char subsystem[PATH_MAX_LENGTH];
struct string_list *subsystem_fullpaths; struct string_list *subsystem_fullpaths;
char savefile_name[PATH_MAX_LENGTH]; struct
char savestate_name[PATH_MAX_LENGTH]; {
char cheatfile_name[PATH_MAX_LENGTH]; /* Used on reentrancy to use a savestate dir. */
char savefile[PATH_MAX_LENGTH];
/* Used on reentrancy to use a savestate dir. */ char savestate[PATH_MAX_LENGTH];
char savefile_dir[PATH_MAX_LENGTH];
char savestate_dir[PATH_MAX_LENGTH];
#ifdef HAVE_OVERLAY #ifdef HAVE_OVERLAY
char overlay_dir[PATH_MAX_LENGTH]; char overlay[PATH_MAX_LENGTH];
char osk_overlay_dir[PATH_MAX_LENGTH]; char osk_overlay[PATH_MAX_LENGTH];
#endif #endif
} dir;
bool block_patch; struct
bool ups_pref; {
bool bps_pref; bool block_patch;
bool ips_pref; bool ups_pref;
char ups_name[PATH_MAX_LENGTH]; bool bps_pref;
char bps_name[PATH_MAX_LENGTH]; bool ips_pref;
char ips_name[PATH_MAX_LENGTH]; } patch;
struct struct
{ {
@ -180,28 +198,39 @@ typedef struct global
bool movie_end; bool movie_end;
} bsv; } bsv;
bool sram_load_disable; struct
bool sram_save_disable; {
bool use_sram; bool load_disable;
bool save_disable;
bool use;
} sram;
/* Turbo support. */ /* Turbo support. */
bool turbo_frame_enable[MAX_USERS]; struct
uint16_t turbo_enable[MAX_USERS]; {
unsigned turbo_count; bool frame_enable[MAX_USERS];
uint16_t enable[MAX_USERS];
unsigned count;
} turbo;
/* Autosave support. */ /* Autosave support. */
autosave_t **autosave; struct
unsigned num_autosave; {
autosave_t **list;
unsigned num;
} autosave;
#ifdef HAVE_NETPLAY #ifdef HAVE_NETPLAY
/* Netplay. */ /* Netplay. */
char netplay_server[PATH_MAX_LENGTH]; struct
bool netplay_enable; {
bool netplay_is_client; char server[PATH_MAX_LENGTH];
bool netplay_is_spectate; bool enable;
unsigned netplay_sync_frames; bool is_client;
unsigned netplay_port; bool is_spectate;
unsigned sync_frames;
unsigned port;
} netplay;
#endif #endif
/* Recording. */ /* Recording. */
@ -275,18 +304,20 @@ typedef struct global
* will write to this file. */ * will write to this file. */
FILE *log_file; FILE *log_file;
bool main_is_init; struct
bool content_is_init; {
bool error_in_init; bool main;
char error_string[PATH_MAX_LENGTH]; bool content;
bool error;
struct
{
bool no_content;
enum rarch_core_type type;
} core;
} inited;
jmp_buf error_sjlj_context; jmp_buf error_sjlj_context;
char error_string[PATH_MAX_LENGTH];
bool libretro_no_content;
enum rarch_core_type core_type;
/* Config file associated with per-core configs. */
char core_specific_config_path[PATH_MAX_LENGTH];
retro_keyboard_event_t frontend_key_event; retro_keyboard_event_t frontend_key_event;
} global_t; } global_t;

View File

@ -203,7 +203,7 @@ static bool take_screenshot_viewport(void)
if (!*settings->screenshot_directory) if (!*settings->screenshot_directory)
{ {
fill_pathname_basedir(screenshot_path, global->basename, fill_pathname_basedir(screenshot_path, global->name.base,
sizeof(screenshot_path)); sizeof(screenshot_path));
screenshot_dir = screenshot_path; screenshot_dir = screenshot_path;
} }
@ -237,7 +237,7 @@ static bool take_screenshot_raw(void)
if (!*settings->screenshot_directory) if (!*settings->screenshot_directory)
{ {
fill_pathname_basedir(screenshot_path, global->basename, fill_pathname_basedir(screenshot_path, global->name.base,
sizeof(screenshot_path)); sizeof(screenshot_path));
screenshot_dir = screenshot_path; screenshot_dir = screenshot_path;
} }
@ -268,7 +268,7 @@ bool take_screenshot(void)
(const struct retro_hw_render_callback*)video_driver_callback(); (const struct retro_hw_render_callback*)video_driver_callback();
/* No way to infer screenshot directory. */ /* No way to infer screenshot directory. */
if ((!*settings->screenshot_directory) && (!*global->basename)) if ((!*settings->screenshot_directory) && (!*global->name.base))
return false; return false;
viewport_read = (settings->video.gpu_screenshot || viewport_read = (settings->video.gpu_screenshot ||

View File

@ -230,7 +230,7 @@ static int cb_update_databases(void *data, size_t len)
static int cb_update_overlays(void *data, size_t len) static int cb_update_overlays(void *data, size_t len)
{ {
global_t *global = global_get_ptr(); global_t *global = global_get_ptr();
return cb_generic_download(data, len, global->overlay_dir); return cb_generic_download(data, len, global->dir.overlay);
} }
static int cb_update_cheats(void *data, size_t len) static int cb_update_cheats(void *data, size_t len)