From c8eca5b06a09caf8a20cfc53b685dd1134f011c2 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Thu, 25 Jun 2015 13:57:24 +0200 Subject: [PATCH] Create rarch_system_info_free --- dynamic.c | 13 +------------ retroarch.c | 29 +++++++++++++++++++++++++---- system.h | 2 +- 3 files changed, 27 insertions(+), 17 deletions(-) diff --git a/dynamic.c b/dynamic.c index 644b464643..108d94d6f7 100644 --- a/dynamic.c +++ b/dynamic.c @@ -515,8 +515,6 @@ void init_libretro_sym(enum rarch_core_type type) void uninit_libretro_sym(void) { driver_t *driver = driver_get_ptr(); - global_t *global = global_get_ptr(); - rarch_system_info_t *system = rarch_system_info_get_ptr(); #ifdef HAVE_DYNAMIC if (lib_handle) @@ -524,17 +522,8 @@ void uninit_libretro_sym(void) lib_handle = NULL; #endif - if (system->core_options) - { - core_option_flush(system->core_options); - core_option_free(system->core_options); - } + rarch_system_info_free(); - /* No longer valid. */ - free(system->special); - free(system->ports); - - rarch_system_info_clear(); driver->camera_active = false; driver->location_active = false; diff --git a/retroarch.c b/retroarch.c index 57f2bc5507..745e9d07b0 100644 --- a/retroarch.c +++ b/retroarch.c @@ -317,16 +317,37 @@ static void set_special_paths(char **argv, unsigned num_content) sizeof(settings->system_directory)); } -rarch_system_info_t g_system; +static rarch_system_info_t *g_system; + +static rarch_system_info_t *rarch_system_info_new(void) +{ + return (rarch_system_info_t*)calloc(1, sizeof(rarch_system_info_t)); +} rarch_system_info_t *rarch_system_info_get_ptr(void) { - return &g_system; + if (!g_system) + g_system = rarch_system_info_new(); + return g_system; } -void rarch_system_info_clear(void) +void rarch_system_info_free(void) { - memset(&g_system, 0, sizeof(g_system)); + if (!g_system) + return; + + if (g_system->core_options) + { + core_option_flush(g_system->core_options); + core_option_free(g_system->core_options); + } + + /* No longer valid. */ + free(g_system->special); + free(g_system->ports); + + free(g_system); + g_system = NULL; } void set_paths_redirect(const char *path) diff --git a/system.h b/system.h index 4beb2dec99..a7519b0230 100644 --- a/system.h +++ b/system.h @@ -59,7 +59,7 @@ typedef struct rarch_system_info rarch_system_info_t *rarch_system_info_get_ptr(void); -void rarch_system_info_clear(void); +void rarch_system_info_free(void); #ifdef __cplusplus }