From fad6e2e87e84d3c67e5977b0c7a2f47f0a0fd224 Mon Sep 17 00:00:00 2001 From: Gregor Richards Date: Fri, 30 Sep 2016 15:51:15 -0400 Subject: [PATCH] Make quirks a bidirectional interface, so the frontend can refuse quirks it doesn't support, in particular variable sized states. --- dynamic.c | 11 ++++++++++- libretro-common/include/libretro.h | 3 ++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/dynamic.c b/dynamic.c index c74bb92c04..b2ad6bb394 100644 --- a/dynamic.c +++ b/dynamic.c @@ -1609,7 +1609,16 @@ bool rarch_environment_cb(unsigned cmd, void *data) } case RETRO_ENVIRONMENT_SET_SERIALIZATION_QUIRKS: - core_set_serialization_quirks(*((uint32_t *) data)); + core_set_serialization_quirks(*((uint64_t *) data)); + + /* Zero any unrecognized quirks */ + *((uint64_t *) data) &= ~((uint64_t) + ((RETRO_SERIALIZATION_QUIRK_ARCHITECTURE_DEPENDENT-1) | + RETRO_SERIALIZATION_QUIRK_ARCHITECTURE_DEPENDENT)); + + /* And zero variable-sized serialization, which we don't support */ + *((uint64_t *) data) &= ~((uint64_t) RETRO_SERIALIZATION_QUIRK_VARIABLE_SIZE); + break; /* Default */ diff --git a/libretro-common/include/libretro.h b/libretro-common/include/libretro.h index e1a3c46e71..7f8e340aa5 100644 --- a/libretro-common/include/libretro.h +++ b/libretro-common/include/libretro.h @@ -997,7 +997,8 @@ struct retro_hw_render_context_negotiation_interface #define RETRO_ENVIRONMENT_SET_SERIALIZATION_QUIRKS 44 /* uint64_t * -- - * Sets quirk flags associated with serialization. + * Sets quirk flags associated with serialization. The frontend will zero any flags it doesn't + * recognize or support. */