mirror of
https://github.com/libretro/RetroArch
synced 2025-03-03 04:14:00 +00:00
task_save_handler - rewrite code - put string on stack instead
of heap, avoid using strlcat
This commit is contained in:
parent
c722653c97
commit
c05ec27334
@ -54,12 +54,12 @@
|
||||
read/write is a possible suspend to JS code */
|
||||
#define SAVE_STATE_CHUNK 4096 * 4096
|
||||
#else
|
||||
/* A low common denominator write chunk size. On a slow
|
||||
(speed class 6) SD card, we can write 6MB/s. That gives us
|
||||
roughly 100KB/frame.
|
||||
This means we can write savestates with one syscall for cores
|
||||
with less than 100KB of state. Class 10 is the standard now
|
||||
even for lousy cards and supports 10MB/s, so you may prefer
|
||||
/* A low common denominator write chunk size. On a slow
|
||||
(speed class 6) SD card, we can write 6MB/s. That gives us
|
||||
roughly 100KB/frame.
|
||||
This means we can write savestates with one syscall for cores
|
||||
with less than 100KB of state. Class 10 is the standard now
|
||||
even for lousy cards and supports 10MB/s, so you may prefer
|
||||
to put this to 170KB. This all assumes that task_save's loop
|
||||
is iterated once per frame at 60 FPS; if it's updated less
|
||||
frequently this number could be doubled or quadrupled depending
|
||||
@ -537,8 +537,7 @@ static void task_save_handler(retro_task_t *task)
|
||||
|
||||
if (task_get_cancelled(task) || written != remaining)
|
||||
{
|
||||
size_t err_size = 8192 * sizeof(char);
|
||||
char *err = (char*)malloc(err_size);
|
||||
char msg[PATH_MAX_LENGTH];
|
||||
|
||||
if (state->flags & SAVE_TASK_FLAG_UNDO_SAVE)
|
||||
{
|
||||
@ -546,21 +545,19 @@ static void task_save_handler(retro_task_t *task)
|
||||
MSG_FAILED_TO_UNDO_SAVE_STATE);
|
||||
RARCH_ERR("[State]: %s \"%s\".\n", failed_undo_str,
|
||||
undo_save_buf.path);
|
||||
err[0] = '\0';
|
||||
snprintf(err, err_size - 1, "%s \"RAM\".", failed_undo_str);
|
||||
snprintf(msg, sizeof(msg), "%s \"RAM\".", failed_undo_str);
|
||||
}
|
||||
else
|
||||
{
|
||||
size_t _len = strlcpy(err,
|
||||
size_t _len = strlcpy(msg,
|
||||
msg_hash_to_str(MSG_FAILED_TO_SAVE_STATE_TO),
|
||||
err_size - 1);
|
||||
err[ _len] = ' ';
|
||||
err[++_len] = '\0';
|
||||
strlcat(err, state->path, err_size - 1);
|
||||
sizeof(msg));
|
||||
msg[ _len] = ' ';
|
||||
msg[++_len] = '\0';
|
||||
strlcpy(msg + _len, state->path, sizeof(msg) - _len);
|
||||
}
|
||||
|
||||
task_set_error(task, strdup(err));
|
||||
free(err);
|
||||
task_set_error(task, strdup(msg));
|
||||
task_save_handler_finished(task, state);
|
||||
return;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user