From c84470566504a3faa1ad83b05b8d806ce7957ec1 Mon Sep 17 00:00:00 2001 From: Nargash <25422315+Nargash@users.noreply.github.com> Date: Mon, 2 Aug 2021 20:31:48 -0500 Subject: [PATCH] Enable verbosity and logging before initial config file load --- configuration.c | 21 +++++++++++++---- retroarch.c | 60 ++++++++++++++++++++++++++++--------------------- 2 files changed, 51 insertions(+), 30 deletions(-) diff --git a/configuration.c b/configuration.c index ae5d26b483..6ae99e3e82 100644 --- a/configuration.c +++ b/configuration.c @@ -3067,6 +3067,7 @@ static bool config_load_file(global_t *global, bool ret = false; unsigned tmp_uint = 0; bool tmp_bool = false; + static bool first_load = true; unsigned msg_color = 0; char *save = NULL; char *override_username = NULL; @@ -3158,13 +3159,24 @@ static bool config_load_file(global_t *global, settings->bools.network_remote_enable_user[i], tmp_bool); } #endif - if (config_get_bool(conf, "log_verbosity", &tmp_bool)) + /* Set verbosity according to config only if the 'v' command line argument was not used + * or if it is not the first config load. */ + if (config_get_bool(conf, "log_verbosity", &tmp_bool) && + (!retroarch_override_setting_is_set(RARCH_OVERRIDE_SETTING_VERBOSITY, NULL) || + !first_load)) { if (tmp_bool) verbosity_enable(); else verbosity_disable(); } + /* On first config load, make sure log_to_file is true if 'log-file' command line + * argument was used. */ + if (retroarch_override_setting_is_set(RARCH_OVERRIDE_SETTING_LOG_TO_FILE, NULL) && + first_load) + { + configuration_set_bool(settings,settings->bools.log_to_file,true); + } if (config_get_uint(conf, "frontend_log_level", &tmp_uint)) { verbosity_set_log_level(tmp_uint); @@ -3595,6 +3607,7 @@ end: free(path_settings); if (size_settings) free(size_settings); + first_load = false; return ret; } @@ -3941,15 +3954,15 @@ success: */ static void config_parse_file(global_t *global) { + const char *config_path = path_get(RARCH_PATH_CONFIG); if (path_is_empty(RARCH_PATH_CONFIG)) { RARCH_LOG("[Config]: Loading default config.\n"); } + else + RARCH_LOG("[Config]: Loading config from: \"%s\".\n", config_path); { - const char *config_path = path_get(RARCH_PATH_CONFIG); - RARCH_LOG("[Config]: Loading config from: \"%s\".\n", config_path); - if (!config_load_file(global, config_path, config_get_ptr())) { RARCH_ERR("[Config]: Couldn't find config at path: \"%s\".\n", diff --git a/retroarch.c b/retroarch.c index 417fc84930..b6af96313d 100644 --- a/retroarch.c +++ b/retroarch.c @@ -35184,6 +35184,22 @@ static bool retroarch_parse_input_and_config( retroarch_override_setting_set( RARCH_OVERRIDE_SETTING_STATE_PATH, NULL); break; + case 'v': + verbosity_enable(); + retroarch_override_setting_set( + RARCH_OVERRIDE_SETTING_VERBOSITY, NULL); + break; + case RA_OPT_LOG_FILE: + /* Enable 'log to file' */ + configuration_set_bool(p_rarch->configuration_settings, + p_rarch->configuration_settings->bools.log_to_file, true); + + retroarch_override_setting_set( + RARCH_OVERRIDE_SETTING_LOG_TO_FILE, NULL); + + /* Cache log file path override */ + rarch_log_file_set_override(optarg); + break; /* Must handle '?' otherwise you get an infinite loop */ case '?': @@ -35194,6 +35210,13 @@ static bool retroarch_parse_input_and_config( } } } + verbosity_enabled = verbosity_is_enabled(); + /* Enable logging to file if verbosity and log-file arguments were passed. + * RARCH_OVERRIDE_SETTING_LOG_TO_FILE is set by the RA_OPT_LOG_FILE case above + * The parameters passed to rarch_log_file_init are hardcoded as the config + * has not yet been initialized at this point. */ + if (verbosity_enabled && retroarch_override_setting_is_set(RARCH_OVERRIDE_SETTING_LOG_TO_FILE, NULL)) + rarch_log_file_init(true,false,'\0'); /* Flush out some states that could have been set * by core environment variables. */ @@ -35213,6 +35236,15 @@ static bool retroarch_parse_input_and_config( config_load(&p_rarch->g_extern); } + verbosity_enabled = verbosity_is_enabled(); + /* Init logging after config load only if not overridden by command line argument. + * This handles when logging is set in the config but not via the --log-file option. */ + if (verbosity_enabled && !retroarch_override_setting_is_set(RARCH_OVERRIDE_SETTING_LOG_TO_FILE, NULL)) + rarch_log_file_init( + p_rarch->configuration_settings->bools.log_to_file, + p_rarch->configuration_settings->bools.log_to_file_timestamp, + p_rarch->configuration_settings->paths.log_dir); + /* Second pass: All other arguments override the config file */ optind = 1; @@ -35279,12 +35311,6 @@ static bool retroarch_parse_input_and_config( p_rarch->rarch_force_fullscreen = true; break; - case 'v': - verbosity_enable(); - retroarch_override_setting_set( - RARCH_OVERRIDE_SETTING_VERBOSITY, NULL); - break; - case 'N': { unsigned new_port; @@ -35589,18 +35615,6 @@ static bool retroarch_parse_input_and_config( retroarch_print_version(); exit(0); - case RA_OPT_LOG_FILE: - /* Enable 'log to file' */ - configuration_set_bool(p_rarch->configuration_settings, - p_rarch->configuration_settings->bools.log_to_file, true); - - retroarch_override_setting_set( - RARCH_OVERRIDE_SETTING_LOG_TO_FILE, NULL); - - /* Cache log file path override */ - rarch_log_file_set_override(optarg); - break; - case 'h': #ifdef HAVE_CONFIGFILE case 'c': @@ -35608,6 +35622,8 @@ static bool retroarch_parse_input_and_config( #endif case 's': case 'S': + case 'v': + case RA_OPT_LOG_FILE: break; /* Handled in the first pass */ case '?': @@ -35628,14 +35644,6 @@ static bool retroarch_parse_input_and_config( } } - verbosity_enabled = verbosity_is_enabled(); - - if (verbosity_enabled) - rarch_log_file_init( - p_rarch->configuration_settings->bools.log_to_file, - p_rarch->configuration_settings->bools.log_to_file_timestamp, - p_rarch->configuration_settings->paths.log_dir); - #ifdef HAVE_GIT_VERSION RARCH_LOG("RetroArch %s (Git %s)\n", PACKAGE_VERSION, retroarch_git_version);