From 0d661ef6a2af06cf83b6ff5edb5e412e3bcd0666 Mon Sep 17 00:00:00 2001
From: Gregor Richards <hg-yff@gregor.im>
Date: Fri, 30 Sep 2016 14:16:48 -0400
Subject: [PATCH] Fix some backwards implementation in reporting serialization
 quirks

---
 core.h                        |  4 +++-
 core_impl.c                   | 12 ++++++++----
 dynamic.c                     |  4 ++++
 network/netplay/netplay.c     |  4 ++--
 network/netplay/netplay_net.c |  3 +--
 5 files changed, 18 insertions(+), 9 deletions(-)

diff --git a/core.h b/core.h
index c760727b7a..258588c4ab 100644
--- a/core.h
+++ b/core.h
@@ -178,7 +178,9 @@ bool core_set_environment(retro_ctx_environ_info_t *info);
 
 bool core_serialize_size(retro_ctx_size_info_t *info);
 
-uint32_t core_serialize_quirks(void);
+uint32_t core_serialization_quirks(void);
+
+void core_set_serialization_quirks(uint32_t quirks);
 
 bool core_serialize(retro_ctx_serialize_info_t *info);
 
diff --git a/core_impl.c b/core_impl.c
index 3bae3c6bee..e0197842f5 100644
--- a/core_impl.c
+++ b/core_impl.c
@@ -52,6 +52,7 @@ static bool                core_game_loaded    = false;
 static bool                core_input_polled   = false;
 static bool   core_has_set_input_descriptors   = false;
 static struct retro_callbacks retro_ctx;
+static uint32_t            core_serialization_quirks_v = 0;
 
 static void core_input_state_poll_maybe(void)
 {
@@ -291,11 +292,14 @@ bool core_unserialize(retro_ctx_serialize_info_t *info)
    return true;
 }
 
-uint32_t core_serialize_quirks(void)
+uint32_t core_serialization_quirks(void)
 {
-   uint32_t ret = 0;
-   rarch_environment_cb(RETRO_ENVIRONMENT_SET_SERIALIZATION_QUIRKS, &ret);
-   return ret;
+   return core_serialization_quirks_v;
+}
+
+void core_set_serialization_quirks(uint32_t quirks)
+{
+   core_serialization_quirks_v = quirks;
 }
 
 bool core_serialize(retro_ctx_serialize_info_t *info)
diff --git a/dynamic.c b/dynamic.c
index 933f11f171..c74bb92c04 100644
--- a/dynamic.c
+++ b/dynamic.c
@@ -1608,6 +1608,10 @@ bool rarch_environment_cb(unsigned cmd, void *data)
          break;
       }
 
+      case RETRO_ENVIRONMENT_SET_SERIALIZATION_QUIRKS:
+         core_set_serialization_quirks(*((uint32_t *) data));
+         break;
+
       /* Default */
       default:
          RARCH_LOG("Environ UNSUPPORTED (#%u).\n", cmd);
diff --git a/network/netplay/netplay.c b/network/netplay/netplay.c
index 90fe92303b..c75b0df87a 100644
--- a/network/netplay/netplay.c
+++ b/network/netplay/netplay.c
@@ -960,7 +960,7 @@ bool netplay_wait_and_init_serialization(netplay_t *netplay)
       return true;
 
    /* Wait maximally 60 frames, or until the core reports it's initialized */
-   for (frames = 0; (core_serialize_quirks() & RETRO_SERIALIZATION_QUIRK_INITIALIZING) && frames < 60; frames++)
+   for (frames = 0; (core_serialization_quirks() & RETRO_SERIALIZATION_QUIRK_INITIALIZING) && frames < 60; frames++)
    {
 #if defined(HAVE_THREADS)
          autosave_lock();
@@ -1390,7 +1390,7 @@ bool init_netplay(bool is_spectate, const char *server, unsigned port)
    core_set_default_callbacks(&cbs);
 
    /* Map the core's quirks to our quirks */
-   serialization_quirks = core_serialize_quirks();
+   serialization_quirks = core_serialization_quirks();
    if ((serialization_quirks & ~((uint32_t) NETPLAY_QUIRK_MAP_UNDERSTOOD)))
    {
       /* Quirks we don't support! Just disable everything. */
diff --git a/network/netplay/netplay_net.c b/network/netplay/netplay_net.c
index ce3e79d2e8..cc8319e1ab 100644
--- a/network/netplay/netplay_net.c
+++ b/network/netplay/netplay_net.c
@@ -61,8 +61,7 @@ static bool netplay_net_pre_frame(netplay_t *netplay)
 {
    retro_ctx_serialize_info_t serial_info;
 
-   if (netplay_delta_frame_ready(netplay, &netplay->buffer[netplay->self_ptr], netplay->self_frame_count) &&
-       netplay->self_frame_count > 0)
+   if (netplay_delta_frame_ready(netplay, &netplay->buffer[netplay->self_ptr], netplay->self_frame_count))
    {
       serial_info.data_const = NULL;
       serial_info.data = netplay->buffer[netplay->self_ptr].state;