From 8aa16caef5fcd7ca510b738f959e2483ce825cfd Mon Sep 17 00:00:00 2001 From: leiradel Date: Fri, 19 Apr 2019 15:01:02 +0100 Subject: [PATCH 1/3] Fix format string in log message --- cheevos/var.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cheevos/var.c b/cheevos/var.c index 683ae6918e..d4ae654499 100644 --- a/cheevos/var.c +++ b/cheevos/var.c @@ -321,7 +321,7 @@ uint8_t* cheevos_var_get_memory(const cheevos_var_t* var) meminfo.id = RETRO_MEMORY_RTC; break; default: - CHEEVOS_ERR(CHEEVOS_TAG "invalid bank id: %s\n", var->bank_id); + CHEEVOS_ERR(CHEEVOS_TAG "invalid bank id: %d\n", var->bank_id); break; } From c0bb91150105ae8853b2301d26b403e9e173e36e Mon Sep 17 00:00:00 2001 From: leiradel Date: Fri, 19 Apr 2019 15:12:04 +0100 Subject: [PATCH 2/3] Fix check to chose between mmaps and meminfo --- cheevos/var.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cheevos/var.c b/cheevos/var.c index d4ae654499..b595a22753 100644 --- a/cheevos/var.c +++ b/cheevos/var.c @@ -295,7 +295,7 @@ uint8_t* cheevos_var_get_memory(const cheevos_var_t* var) { rarch_system_info_t* system = runloop_get_system_info(); - if (system->mmaps.num_descriptors > var->bank_id) + if (system->mmaps.num_descriptors != 0) { if (var->value >= system->mmaps.descriptors[var->bank_id].core.len) return NULL; From dab941e53dcc611368d35ed8ddec565d0bef21d6 Mon Sep 17 00:00:00 2001 From: leiradel Date: Fri, 19 Apr 2019 17:33:24 +0100 Subject: [PATCH 3/3] Simpler code paths --- cheevos/var.c | 77 +++++++++++++++++++++++++-------------------------- 1 file changed, 37 insertions(+), 40 deletions(-) diff --git a/cheevos/var.c b/cheevos/var.c index b595a22753..d0d53cecb6 100644 --- a/cheevos/var.c +++ b/cheevos/var.c @@ -290,54 +290,51 @@ Testing uint8_t* cheevos_var_get_memory(const cheevos_var_t* var) { uint8_t* memory = NULL; + size_t length = 0; - if (var->bank_id >= 0) + if (var->bank_id < 0) + return NULL; + + rarch_system_info_t* system = runloop_get_system_info(); + + if (system->mmaps.num_descriptors != 0) { - rarch_system_info_t* system = runloop_get_system_info(); + memory = (uint8_t*)system->mmaps.descriptors[var->bank_id].core.ptr; + length = system->mmaps.descriptors[var->bank_id].core.len; + } + else + { + retro_ctx_memory_info_t meminfo = {NULL, 0, 0}; - if (system->mmaps.num_descriptors != 0) + switch (var->bank_id) { - if (var->value >= system->mmaps.descriptors[var->bank_id].core.len) - return NULL; - - memory = (uint8_t*)system->mmaps.descriptors[var->bank_id].core.ptr; - } - else - { - retro_ctx_memory_info_t meminfo = {NULL, 0, 0}; - - switch (var->bank_id) - { - case 0: - meminfo.id = RETRO_MEMORY_SYSTEM_RAM; - break; - case 1: - meminfo.id = RETRO_MEMORY_SAVE_RAM; - break; - case 2: - meminfo.id = RETRO_MEMORY_VIDEO_RAM; - break; - case 3: - meminfo.id = RETRO_MEMORY_RTC; - break; - default: - CHEEVOS_ERR(CHEEVOS_TAG "invalid bank id: %d\n", var->bank_id); - break; - } - - core_get_memory(&meminfo); - - if (var->value >= meminfo.size) - return NULL; - - memory = (uint8_t*)meminfo.data; + case 0: + meminfo.id = RETRO_MEMORY_SYSTEM_RAM; + break; + case 1: + meminfo.id = RETRO_MEMORY_SAVE_RAM; + break; + case 2: + meminfo.id = RETRO_MEMORY_VIDEO_RAM; + break; + case 3: + meminfo.id = RETRO_MEMORY_RTC; + break; + default: + CHEEVOS_ERR(CHEEVOS_TAG "invalid bank id: %d\n", var->bank_id); + break; } - if (memory) - memory += var->value; + core_get_memory(&meminfo); + + memory = (uint8_t*)meminfo.data; + length = meminfo.size; } - return memory; + if (memory == NULL || var->value >= length) + return NULL; + + return memory + var->value; } unsigned cheevos_var_get_value(cheevos_var_t* var)