summaryrefslogtreecommitdiffstats
path: root/games/RetroArch/savestates.patch
blob: 932783783b0679237e6fa27125b14c4f41372afa (plain)
From 64459bda3a8add5c5e679b3fa4d1fd4cd7796233 Mon Sep 17 00:00:00 2001
From: Tatsuya79 <jeanpascalmeunier@hotmail.com>
Date: Sat, 1 Sep 2018 01:41:21 +0200
Subject: [PATCH] revert #7156

revert https://github.com/libretro/RetroArch/pull/7156
---
 tasks/task_save.c | 142 ++++++++++++++++++++--------------------------
 1 file changed, 62 insertions(+), 80 deletions(-)

diff --git a/tasks/task_save.c b/tasks/task_save.c
index fb08c229b7..1b5d93be4e 100644
--- a/tasks/task_save.c
+++ b/tasks/task_save.c
@@ -555,33 +555,6 @@ static void task_save_handler_finished(retro_task_t *task,
    free(state);
 }
 
-void* get_serialized_data(const char *path, size_t serial_size)
-{
-   retro_ctx_serialize_info_t serial_info;
-   bool ret    = false;
-   void *data  = NULL;
-
-   data = malloc(serial_size);
-
-   if (!data)
-      return NULL;
-
-   RARCH_LOG("%s: %d %s.\n",
-         msg_hash_to_str(MSG_STATE_SIZE),
-         (int)serial_size,
-         msg_hash_to_str(MSG_BYTES));
-
-   serial_info.data = data;
-   serial_info.size = serial_size;
-   ret              = core_serialize(&serial_info);
-   if ( !ret )
-   {
-      free(data) ;
-      return NULL ;
-   }
-   return data ;
-}
-
 /**
  * task_save_handler:
  * @task : the task being worked on
@@ -603,22 +576,9 @@ static void task_save_handler(retro_task_t *task)
          return;
    }
 
-   if (!state->data)
-   {
-      state->data = get_serialized_data(state->path, state->size) ;
-   }
-
    remaining       = MIN(state->size - state->written, SAVE_STATE_CHUNK);
-
-   if ( state->data )
-   {
-      written         = (int)intfstream_write(state->file,
-            (uint8_t*)state->data + state->written, remaining);
-   }
-   else
-   {
-      written = 0 ;
-   }
+   written         = (int)intfstream_write(state->file,
+         (uint8_t*)state->data + state->written, remaining);
 
    state->written += written;
 
@@ -1174,7 +1134,6 @@ error:
       free(task);
 }
 
-
 /**
  * content_save_state:
  * @path      : path of saved state that shall be written to.
@@ -1185,62 +1144,85 @@ error:
  **/
 bool content_save_state(const char *path, bool save_to_disk, bool autosave)
 {
-   //retro_ctx_serialize_info_t serial_info;
+   retro_ctx_serialize_info_t serial_info;
    retro_ctx_size_info_t info;
    bool ret    = false;
    void *data  = NULL;
 
    core_serialize_size(&info);
 
-   if (save_to_disk)
+   RARCH_LOG("%s: \"%s\".\n",
+         msg_hash_to_str(MSG_SAVING_STATE),
+         path);
+
+   if (info.size == 0)
+      return false;
+
+   data = malloc(info.size);
+
+   if (!data)
+      return false;
+
+   RARCH_LOG("%s: %d %s.\n",
+         msg_hash_to_str(MSG_STATE_SIZE),
+         (int)info.size,
+         msg_hash_to_str(MSG_BYTES));
+
+   serial_info.data = data;
+   serial_info.size = info.size;
+   ret              = core_serialize(&serial_info);
+
+   if (ret)
    {
-      if (filestream_exists(path) && !autosave)
+      if (save_to_disk)
       {
-         /* Before overwritting the savestate file, load it into a buffer
-         to allow undo_save_state() to work */
-         /* TODO/FIXME - Use msg_hash_to_str here */
-         RARCH_LOG("%s ...\n",
-               msg_hash_to_str(MSG_FILE_ALREADY_EXISTS_SAVING_TO_BACKUP_BUFFER));
+         if (filestream_exists(path) && !autosave)
+         {
+            /* Before overwritting the savestate file, load it into a buffer
+            to allow undo_save_state() to work */
+            /* TODO/FIXME - Use msg_hash_to_str here */
+            RARCH_LOG("%s ...\n",
+                  msg_hash_to_str(MSG_FILE_ALREADY_EXISTS_SAVING_TO_BACKUP_BUFFER));
 
-         task_push_load_and_save_state(path, data, info.size, true, autosave);
+            task_push_load_and_save_state(path, data, info.size, true, autosave);
+         }
+         else
+            task_push_save_state(path, data, info.size, autosave);
       }
       else
-         task_push_save_state(path, data, info.size, autosave);
-   }
-   else
-   {
-      data = get_serialized_data(path, info.size) ;
-      if ( data == NULL )
       {
-         RARCH_ERR("%s \"%s\".\n",
-               msg_hash_to_str(MSG_FAILED_TO_SAVE_STATE_TO),
-               path);
-         return false ;
-      }
-      /* save_to_disk is false, which means we are saving the state
-      in undo_load_buf to allow content_undo_load_state() to restore it */
+         /* save_to_disk is false, which means we are saving the state
+         in undo_load_buf to allow content_undo_load_state() to restore it */
 
-      /* If we were holding onto an old state already, clean it up first */
-      if (undo_load_buf.data)
-      {
-         free(undo_load_buf.data);
-         undo_load_buf.data = NULL;
-      }
+         /* If we were holding onto an old state already, clean it up first */
+         if (undo_load_buf.data)
+         {
+            free(undo_load_buf.data);
+            undo_load_buf.data = NULL;
+         }
 
-      undo_load_buf.data = malloc(info.size);
-      if (!undo_load_buf.data)
-      {
+         undo_load_buf.data = malloc(info.size);
+         if (!undo_load_buf.data)
+         {
+            free(data);
+            return false;
+         }
+
+         memcpy(undo_load_buf.data, data, info.size);
          free(data);
-         return false;
+         undo_load_buf.size = info.size;
+         strlcpy(undo_load_buf.path, path, sizeof(undo_load_buf.path));
       }
-
-      memcpy(undo_load_buf.data, data, info.size);
+   }
+   else
+   {
       free(data);
-      undo_load_buf.size = info.size;
-      strlcpy(undo_load_buf.path, path, sizeof(undo_load_buf.path));
+      RARCH_ERR("%s \"%s\".\n",
+            msg_hash_to_str(MSG_FAILED_TO_SAVE_STATE_TO),
+            path);
    }
 
-   return true;
+   return ret;
 }
 
 /**
-- 
2.18.0