From 21bf01ca6cf511c2533fe2e78a4a2ed833f2f7de Mon Sep 17 00:00:00 2001 From: twinaphex Date: Thu, 4 Jan 2018 08:16:43 +0100 Subject: [PATCH] Update file_stream_transforms.c --- .../streams/file_stream_transforms.c | 41 +++++++++++++------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/libretro-common/streams/file_stream_transforms.c b/libretro-common/streams/file_stream_transforms.c index 898893f96e..b82e868245 100644 --- a/libretro-common/streams/file_stream_transforms.c +++ b/libretro-common/streams/file_stream_transforms.c @@ -28,16 +28,33 @@ RFILE* rfopen(const char *path, const char *mode) { - unsigned int retro_mode = 0; - if (strstr(mode, "r")) - retro_mode = RETRO_VFS_FILE_ACCESS_READ; + RFILE *output = NULL; + unsigned int retro_mode = RETRO_VFS_FILE_ACCESS_READ; + bool position_to_end = false; if (strstr(mode, "w")) retro_mode = RETRO_VFS_FILE_ACCESS_WRITE; - if (strstr(mode, "+")) - retro_mode = RETRO_VFS_FILE_ACCESS_READ_WRITE; - return filestream_open(path, retro_mode, RETRO_VFS_FILE_ACCESS_HINT_NONE); + if (strstr(mode, "a")) + { + retro_mode = RETRO_VFS_FILE_ACCESS_READ_WRITE | + RETRO_VFS_FILE_ACCESS_UPDATE_EXISTING; + position_to_end = true; + } + + if (strstr(mode, "+")) + { + retro_mode = RETRO_VFS_FILE_ACCESS_READ_WRITE; + if (strstr(mode, "r")) + retro_mode = retro_mode & RETRO_VFS_FILE_ACCESS_UPDATE_EXISTING; + } + + output = filestream_open(path, retro_mode, + RETRO_VFS_FILE_ACCESS_HINT_NONE); + if (output && position_to_end) + filestream_seek(output, 0, RETRO_VFS_SEEK_POSITION_END); + + return output; } int rfclose(RFILE* stream) @@ -70,9 +87,9 @@ int rfseek(RFILE* stream, long offset, int origin) } size_t rfread(void* buffer, - size_t elementSize, size_t elementCount, RFILE* stream) + size_t elem_size, size_t elem_count, RFILE* stream) { - return filestream_read(stream, buffer, elementSize*elementCount); + return filestream_read(stream, buffer, elem_size * elem_count); } char *rfgets(char *buffer, int maxCount, RFILE* stream) @@ -86,9 +103,9 @@ int rfgetc(RFILE* stream) } size_t rfwrite(void const* buffer, - size_t elementSize, size_t elementCount, RFILE* stream) + size_t elem_size, size_t elem_count, RFILE* stream) { - return filestream_write(stream, buffer, elementSize*elementCount); + return filestream_write(stream, buffer, elem_size * elem_count); } int rfputc(int character, RFILE * stream) @@ -108,10 +125,10 @@ int rfprintf(RFILE * stream, const char * format, ...) int rferror(RFILE* stream) { - return filestream_error(stream); + return filestream_error(stream); } int rfeof(RFILE* stream) { - return filestream_eof(stream); + return filestream_eof(stream); }