summaryrefslogtreecommitdiff
path: root/games/RetroArch/savestates.patch
diff options
context:
space:
mode:
Diffstat (limited to 'games/RetroArch/savestates.patch')
-rw-r--r--games/RetroArch/savestates.patch206
1 files changed, 206 insertions, 0 deletions
diff --git a/games/RetroArch/savestates.patch b/games/RetroArch/savestates.patch
new file mode 100644
index 0000000000..932783783b
--- /dev/null
+++ b/games/RetroArch/savestates.patch
@@ -0,0 +1,206 @@
+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