From aed8d3d1c264dca7eac15a49ba88c8133f4fa983 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sun, 15 Nov 2015 22:02:24 +0100 Subject: [PATCH] Fix some memory leaks to do with overrides, pass conf to menu_input_remapping_load --- command_event.c | 6 ++++-- configuration.c | 14 ++++++++++---- input/input_remapping.c | 6 +++--- input/input_remapping.h | 4 ++-- menu/cbs/menu_cbs_ok.c | 7 ++++++- 5 files changed, 25 insertions(+), 12 deletions(-) diff --git a/command_event.c b/command_event.c index 32b3589a09..b61d7cf40c 100644 --- a/command_event.c +++ b/command_event.c @@ -782,11 +782,13 @@ static bool event_save_auto_state(void) static void event_init_remapping(void) { settings_t *settings = config_get_ptr(); + const char *path = settings->input.remapping_path; + config_file_t *conf = config_file_new(path); - if (!settings->input.remap_binds_enable) + if (!settings->input.remap_binds_enable || !conf) return; - input_remapping_load_file(settings->input.remapping_path); + input_remapping_load_file(conf, path); } /** diff --git a/configuration.c b/configuration.c index 6b89e39ef9..45a10b2f3a 100644 --- a/configuration.c +++ b/configuration.c @@ -1859,9 +1859,9 @@ bool config_load_override(void) settings_t *settings = config_get_ptr(); rarch_system_info_t *info = rarch_system_info_get_ptr(); - if (!global || !settings ) + if (!global || !settings || !info) { - RARCH_ERR("Could not obtain global pointer or configuration file pointer to retrieve path of retroarch.cfg.\n"); + RARCH_ERR("Could load override config file.\n"); return false; } @@ -1905,6 +1905,8 @@ bool config_load_override(void) /* If a core override exists, add its location to append_config_path */ if (new_conf) { + config_file_free(new_conf); + if (settings->core_specific_config) { RARCH_LOG("Overrides: can't use overrides with with per-core configs, disabling overrides\n"); @@ -1912,17 +1914,21 @@ bool config_load_override(void) } RARCH_LOG("Overrides: core-specific overrides found at %s\n", core_path); strlcpy(global->path.append_config, core_path, sizeof(global->path.append_config)); + should_append = true; } else RARCH_LOG("Overrides: no core-specific overrides found at %s\n", core_path); + /* Create a new config file from game_path */ new_conf = config_file_new(game_path); /* If a game override exists, add it's location to append_config_path */ if (new_conf) { + config_file_free(new_conf); + RARCH_LOG("Overrides: game-specific overrides found at %s\n", game_path); if (should_append) { @@ -2077,7 +2083,7 @@ bool config_load_remap(void) if (new_conf) { RARCH_LOG("Remaps: game-specific remap found at %s\n", game_path); - if (input_remapping_load_file(game_path)) + if (input_remapping_load_file(new_conf, game_path)) { rarch_main_msg_queue_push("Game remap file loaded", 1, 100, true); return true; @@ -2097,7 +2103,7 @@ bool config_load_remap(void) if (new_conf) { RARCH_LOG("Remaps: core-specific remap found at %s\n", core_path); - if (input_remapping_load_file(core_path)) + if (input_remapping_load_file(new_conf, core_path)) { rarch_main_msg_queue_push("Core remap file loaded", 1, 100, true); return true; diff --git a/input/input_remapping.c b/input/input_remapping.c index 96c84d48f3..117ce1bfe7 100644 --- a/input/input_remapping.c +++ b/input/input_remapping.c @@ -21,16 +21,16 @@ /** * input_remapping_load_file: - * @path : Path to remapping file (absolute path). + * @data : Path to config file. * * Loads a remap file from disk to memory. * * Returns: true (1) if successful, otherwise false (0). **/ -bool input_remapping_load_file(const char *path) +bool input_remapping_load_file(void *data, const char *path) { unsigned i, j; - config_file_t *conf = config_file_new(path); + config_file_t *conf = (config_file_t*)data; settings_t *settings = config_get_ptr(); if (!conf || path[0] == '\0') diff --git a/input/input_remapping.h b/input/input_remapping.h index 96e0739df8..d1807eb175 100644 --- a/input/input_remapping.h +++ b/input/input_remapping.h @@ -26,13 +26,13 @@ extern "C" { /** * input_remapping_load_file: - * @path : Path to remapping file (absolute path). + * @data : Path to config file. * * Loads a remap file from disk to memory. * * Returns: true (1) if successful, otherwise false (0). **/ -bool input_remapping_load_file(const char *path); +bool input_remapping_load_file(void *data, const char *path); /** * input_remapping_save_file: diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index 5399777c6c..3ce5cf008f 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -691,7 +691,12 @@ static int generic_action_ok(const char *path, sizeof(global->record.config)); break; case ACTION_OK_LOAD_REMAPPING_FILE: - input_remapping_load_file(action_path); + { + config_file_t *conf = config_file_new(action_path); + + if (conf) + input_remapping_load_file(conf, action_path); + } break; case ACTION_OK_LOAD_CHEAT_FILE: if (global->cheat)