From e516a64a0c82ab45f266fe7bfd7fb71f696bc684 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 27 Jan 2016 09:13:26 +0100 Subject: [PATCH] Create CORE_CTL_RETRO_LOAD_GAME --- content.c | 11 +++++------ libretro_version_1.c | 12 ++++++++++++ libretro_version_1.h | 11 ++++++++++- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/content.c b/content.c index c45e586cd4..a2018c8efe 100644 --- a/content.c +++ b/content.c @@ -495,7 +495,7 @@ static bool load_content( ) { unsigned i; - bool ret = true; + retro_ctx_load_content_info_t load_info; if (!info || !additional_path_allocs) return false; @@ -539,12 +539,11 @@ static bool load_content( } } - if (special) - ret = core.retro_load_game_special(special->id, info, content->size); - else - ret = core.retro_load_game(*content->elems[0].data ? info : NULL); + load_info.content = content; + load_info.special = special; + load_info.info = info; - if (!ret) + if (!core_ctl(CORE_CTL_RETRO_LOAD_GAME, &load_info)) { RARCH_ERR("%s.\n", msg_hash_to_str(MSG_FAILED_TO_LOAD_CONTENT)); return false; diff --git a/libretro_version_1.c b/libretro_version_1.c index a47a8e0ed1..ced6d463ec 100644 --- a/libretro_version_1.c +++ b/libretro_version_1.c @@ -174,6 +174,18 @@ bool core_ctl(enum core_ctl_state state, void *data) switch (state) { + case CORE_CTL_RETRO_LOAD_GAME: + { + retro_ctx_load_content_info_t *load_info = + (retro_ctx_load_content_info_t*)data; + if (!load_info) + return false; + + if (load_info->special) + return core.retro_load_game_special(load_info->special->id, load_info->info, load_info->content->size); + return core.retro_load_game(*load_info->content->elems[0].data ? load_info->info : NULL); + } + break; case CORE_CTL_RETRO_GET_SYSTEM_INFO: { struct retro_system_info *system = (struct retro_system_info*)data; diff --git a/libretro_version_1.h b/libretro_version_1.h index 97e5c4fcd1..f18132ca9c 100644 --- a/libretro_version_1.h +++ b/libretro_version_1.h @@ -87,9 +87,18 @@ enum core_ctl_state **/ CORE_CTL_INIT_SYSTEM_AV_INFO, - CORE_CTL_RETRO_GET_SYSTEM_INFO + CORE_CTL_RETRO_GET_SYSTEM_INFO, + + CORE_CTL_RETRO_LOAD_GAME }; +typedef struct retro_ctx_load_content_info +{ + struct retro_game_info *info; + const struct string_list *content; + const struct retro_subsystem_info *special; +} retro_ctx_load_content_info_t; + typedef struct retro_ctx_serialize_info { const void *data_const;