diff options
Diffstat (limited to 'games/RetroArch/savestates.patch')
-rw-r--r-- | games/RetroArch/savestates.patch | 206 |
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 |