Sync libretro-common

This commit is contained in:
twinaphex 2018-01-05 13:16:04 +01:00
parent cf8e7cd362
commit 751c0fe58c
2 changed files with 60 additions and 43 deletions

View File

@ -32,21 +32,31 @@ RFILE* rfopen(const char *path, const char *mode)
unsigned int retro_mode = RETRO_VFS_FILE_ACCESS_READ; unsigned int retro_mode = RETRO_VFS_FILE_ACCESS_READ;
bool position_to_end = false; bool position_to_end = false;
if (strstr(mode, "w")) if (strstr(mode, "r"))
retro_mode = RETRO_VFS_FILE_ACCESS_WRITE;
if (strstr(mode, "a"))
{ {
retro_mode = RETRO_VFS_FILE_ACCESS_READ_WRITE | retro_mode = RETRO_VFS_FILE_ACCESS_READ;
if (strstr(mode, "+"))
{
retro_mode = RETRO_VFS_FILE_ACCESS_READ_WRITE |
RETRO_VFS_FILE_ACCESS_UPDATE_EXISTING;
}
}
else if (strstr(mode, "w"))
{
retro_mode = RETRO_VFS_FILE_ACCESS_WRITE;
if (strstr(mode, "+"))
retro_mode = RETRO_VFS_FILE_ACCESS_READ_WRITE;
}
else if (strstr(mode, "a"))
{
retro_mode = RETRO_VFS_FILE_ACCESS_WRITE |
RETRO_VFS_FILE_ACCESS_UPDATE_EXISTING; RETRO_VFS_FILE_ACCESS_UPDATE_EXISTING;
position_to_end = true; position_to_end = true;
} if (strstr(mode, "+"))
{
if (strstr(mode, "+")) retro_mode = RETRO_VFS_FILE_ACCESS_READ_WRITE |
{ RETRO_VFS_FILE_ACCESS_UPDATE_EXISTING;
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, output = filestream_open(path, retro_mode,

View File

@ -75,11 +75,6 @@
#endif #endif
#define MODE_STR_READ "r"
#define MODE_STR_READ_UNBUF "rb"
#define MODE_STR_WRITE_UNBUF "wb"
#define MODE_STR_WRITE_PLUS "w+"
#ifdef RARCH_INTERNAL #ifdef RARCH_INTERNAL
#ifndef VFS_FRONTEND #ifndef VFS_FRONTEND
#define VFS_FRONTEND #define VFS_FRONTEND
@ -208,36 +203,48 @@ libretro_vfs_implementation_file *retro_vfs_file_open_impl(const char *path, uns
switch (mode) switch (mode)
{ {
case RETRO_VFS_FILE_ACCESS_READ: case RETRO_VFS_FILE_ACCESS_READ:
if ((stream->hints & RFILE_HINT_UNBUFFERED) == 0) mode_str = "rb";
mode_str = MODE_STR_READ_UNBUF;
/* No "else" here */
flags = O_RDONLY; flags = O_RDONLY;
break;
case RETRO_VFS_FILE_ACCESS_WRITE:
if ((stream->hints & RFILE_HINT_UNBUFFERED) == 0)
mode_str = MODE_STR_WRITE_UNBUF;
else
{
flags = O_WRONLY | O_CREAT | O_TRUNC;
#ifndef _WIN32
flags |= S_IRUSR | S_IWUSR;
#endif
}
break;
case RETRO_VFS_FILE_ACCESS_READ_WRITE:
if ((stream->hints & RFILE_HINT_UNBUFFERED) == 0)
mode_str = MODE_STR_WRITE_PLUS;
else
{
flags = O_RDWR;
#ifdef _WIN32 #ifdef _WIN32
flags |= O_BINARY; flags |= O_BINARY;
#endif #endif
}
break; break;
case RETRO_VFS_FILE_ACCESS_UPDATE_EXISTING:
/* TODO/FIXME - implement */ case RETRO_VFS_FILE_ACCESS_WRITE:
goto error; mode_str = "wb";
flags = O_WRONLY | O_CREAT | O_TRUNC;
#ifndef _WIN32
flags |= S_IRUSR | S_IWUSR;
#else
flags |= O_BINARY;
#endif
break;
case RETRO_VFS_FILE_ACCESS_READ_WRITE:
mode_str = "w+b";
flags = O_RDWR | O_CREAT | O_TRUNC;
#ifndef _WIN32
flags |= S_IRUSR | S_IWUSR;
#else
flags |= O_BINARY;
#endif
break;
case RETRO_VFS_FILE_ACCESS_WRITE | RETRO_VFS_FILE_ACCESS_UPDATE_EXISTING:
case RETRO_VFS_FILE_ACCESS_READ_WRITE | RETRO_VFS_FILE_ACCESS_UPDATE_EXISTING:
mode_str = "r+b";
flags = O_RDWR;
#ifndef _WIN32
flags |= S_IRUSR | S_IWUSR;
#else
flags |= O_BINARY;
#endif
break;
default: default:
goto error; goto error;
} }