Some more cleanups

This commit is contained in:
twinaphex 2017-12-14 00:16:18 +01:00
parent d12df0d91f
commit 7788a852c0
2 changed files with 81 additions and 49 deletions

View File

@ -88,6 +88,10 @@ int filestream_error(RFILE *stream);
int filestream_flush(RFILE *stream);
int filestream_delete(const char *path);
const char *filestream_get_path(RFILE *stream);
static INLINE char *filestream_getline(RFILE *stream)
{
char* newline = (char*)malloc(9);

View File

@ -163,6 +163,54 @@ void filestream_vfs_init(const struct retro_vfs_interface_info* vfs_info)
/* Callback wrappers */
static ssize_t filestream_read_impl(RFILE *stream, void *s, size_t len)
{
if (!stream || !s)
goto error;
if ((stream->hints & RFILE_HINT_UNBUFFERED) == 0)
return fread(s, 1, len, stream->fp);
#ifdef HAVE_MMAP
if (stream->hints & RETRO_VFS_FILE_ACCESS_HINT_MEMORY_MAP)
{
if (stream->mappos > stream->mapsize)
goto error;
if (stream->mappos + len > stream->mapsize)
len = stream->mapsize - stream->mappos;
memcpy(s, &stream->mapped[stream->mappos], len);
stream->mappos += len;
return len;
}
#endif
return read(stream->fd, s, len);
error:
return -1;
}
static void filestream_set_size(RFILE *stream)
{
filestream_seek(stream, 0, SEEK_SET);
filestream_seek(stream, 0, SEEK_END);
stream->size = filestream_tell(stream);
filestream_seek(stream, 0, SEEK_SET);
}
static int filestream_flush_impl(RFILE *stream)
{
if (!stream)
return -1;
return fflush(stream->fp);
}
static int64_t filestream_file_size_impl(RFILE *stream)
{
if (!stream)
@ -258,16 +306,6 @@ int64_t filestream_get_size(RFILE *stream)
return output;
}
static void filestream_set_size(RFILE *stream)
{
filestream_seek(stream, 0, SEEK_SET);
filestream_seek(stream, 0, SEEK_END);
stream->size = filestream_tell(stream);
filestream_seek(stream, 0, SEEK_SET);
}
/**
* filestream_open:
* @path : path to file
@ -495,36 +533,6 @@ void filestream_rewind(RFILE *stream)
stream->error_flag = false;
}
static ssize_t filestream_read_impl(RFILE *stream, void *s, size_t len)
{
if (!stream || !s)
goto error;
if ((stream->hints & RFILE_HINT_UNBUFFERED) == 0)
return fread(s, 1, len, stream->fp);
#ifdef HAVE_MMAP
if (stream->hints & RETRO_VFS_FILE_ACCESS_HINT_MEMORY_MAP)
{
if (stream->mappos > stream->mapsize)
goto error;
if (stream->mappos + len > stream->mapsize)
len = stream->mapsize - stream->mappos;
memcpy(s, &stream->mapped[stream->mappos], len);
stream->mappos += len;
return len;
}
#endif
return read(stream->fd, s, len);
error:
return -1;
}
ssize_t filestream_read(RFILE *stream, void *s, size_t len)
{
int64_t output = filestream_read_impl(stream, s, len);
@ -535,13 +543,6 @@ ssize_t filestream_read(RFILE *stream, void *s, size_t len)
return output;
}
static int filestream_flush_impl(RFILE *stream)
{
if (!stream)
return -1;
return fflush(stream->fp);
}
int filestream_flush(RFILE *stream)
{
int output = filestream_flush_impl(stream);
@ -552,7 +553,12 @@ int filestream_flush(RFILE *stream)
return output;
}
ssize_t filestream_write(RFILE *stream, const void *s, size_t len)
static int filestream_delete_impl(const char *path)
{
return remove(path) == 0;
}
static int64_t filestream_write_impl(RFILE *stream, const void *s, size_t len)
{
if (!stream)
goto error;
@ -570,6 +576,28 @@ error:
return -1;
}
int filestream_delete(const char *path)
{
return filestream_delete_impl(path);
}
const char *filestream_get_path(RFILE *stream)
{
/* TODO/FIXME - implement - is a char pointer sufficient here
* or should we cater to wchar_t and friends too? */
return NULL;
}
ssize_t filestream_write(RFILE *stream, const void *s, size_t len)
{
int64_t output = filestream_write_impl(stream, s, len);
if (output == vfs_error_return_value)
stream->error_flag = true;
return output;
}
int filestream_putc(RFILE *stream, int c)
{
if (!stream)
@ -603,7 +631,7 @@ int filestream_printf(RFILE *stream, const char* format, ...)
int filestream_error(RFILE *stream)
{
if (stream->error_flag)
if (stream && stream->error_flag)
return 1;
return 0;
}