From 64459bda3a8add5c5e679b3fa4d1fd4cd7796233 Mon Sep 17 00:00:00 2001 From: Tatsuya79 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