Improve vfs_implementation

This commit is contained in:
twinaphex 2019-07-15 06:43:37 +02:00
parent 7fb8965416
commit bb29b87ac3
1 changed files with 34 additions and 34 deletions

View File

@ -198,34 +198,32 @@ int64_t retro_vfs_file_seek_internal(libretro_vfs_implementation_file *stream, i
if ((stream->hints & RFILE_HINT_UNBUFFERED) == 0) if ((stream->hints & RFILE_HINT_UNBUFFERED) == 0)
{ {
/* VC2005 and up have a special 64-bit fseek */
#ifdef ATLEAST_VC2005
#ifdef HAVE_CDROM #ifdef HAVE_CDROM
if (stream->scheme == VFS_SCHEME_CDROM) if (stream->scheme == VFS_SCHEME_CDROM)
return retro_vfs_file_seek_cdrom(stream, offset, whence); return retro_vfs_file_seek_cdrom(stream, offset, whence);
else
#endif #endif
/* VC2005 and up have a special 64-bit fseek */
#ifdef ATLEAST_VC2005
return _fseeki64(stream->fp, offset, whence); return _fseeki64(stream->fp, offset, whence);
#elif defined(__CELLOS_LV2__) || defined(_MSC_VER) && _MSC_VER <= 1310 #elif defined(__CELLOS_LV2__) || defined(_MSC_VER) && _MSC_VER <= 1310
return fseek(stream->fp, (long)offset, whence); return fseek(stream->fp, (long)offset, whence);
#elif defined(PS2) #elif defined(PS2)
int64_t ret = fileXioLseek(fileno(stream->fp), (off_t)offset, whence); {
/* fileXioLseek could return positive numbers */ int64_t ret = fileXioLseek(fileno(stream->fp), (off_t)offset, whence);
if (ret > 0) /* fileXioLseek could return positive numbers */
return 0; if (ret > 0)
return ret; return 0;
return ret;
}
#elif defined(ORBIS) #elif defined(ORBIS)
int ret = orbisLseek(stream->fd, offset, whence); {
if (ret < 0) int ret = orbisLseek(stream->fd, offset, whence);
return -1; if (ret < 0)
return 0; return -1;
return 0;
}
#else #else
#ifdef HAVE_CDROM return fseeko(stream->fp, (off_t)offset, whence);
if (stream->scheme == VFS_SCHEME_CDROM)
return retro_vfs_file_seek_cdrom(stream, offset, whence);
else
#endif
return fseeko(stream->fp, (off_t)offset, whence);
#endif #endif
} }
#ifdef HAVE_MMAP #ifdef HAVE_MMAP
@ -576,15 +574,16 @@ end:
int retro_vfs_file_error_impl(libretro_vfs_implementation_file *stream) int retro_vfs_file_error_impl(libretro_vfs_implementation_file *stream)
{ {
#ifdef ORBIS
/* TODO/FIXME - implement this? */
return 0;
#endif
#ifdef HAVE_CDROM #ifdef HAVE_CDROM
if (stream->scheme == VFS_SCHEME_CDROM) if (stream->scheme == VFS_SCHEME_CDROM)
return retro_vfs_file_error_cdrom(stream); return retro_vfs_file_error_cdrom(stream);
#endif #endif
#ifdef ORBIS
/* TODO/FIXME - implement this? */
return 0;
#else
return ferror(stream->fp); return ferror(stream->fp);
#endif
} }
int64_t retro_vfs_file_size_impl(libretro_vfs_implementation_file *stream) int64_t retro_vfs_file_size_impl(libretro_vfs_implementation_file *stream)
@ -622,16 +621,18 @@ int64_t retro_vfs_file_tell_impl(libretro_vfs_implementation_file *stream)
return retro_vfs_file_tell_cdrom(stream); return retro_vfs_file_tell_cdrom(stream);
#endif #endif
#ifdef ORBIS #ifdef ORBIS
int64_t ret = orbisLseek(stream->fd, 0, SEEK_CUR); {
if (ret < 0) int64_t ret = orbisLseek(stream->fd, 0, SEEK_CUR);
return -1; if (ret < 0)
return ret; return -1;
return ret;
}
#else #else
/* VC2005 and up have a special 64-bit ftell */ /* VC2005 and up have a special 64-bit ftell */
#ifdef ATLEAST_VC2005 #ifdef ATLEAST_VC2005
return _ftelli64(stream->fp); return _ftelli64(stream->fp);
#else #else
return ftell(stream->fp); return ftell(stream->fp);
#endif #endif
#endif #endif
} }
@ -675,17 +676,16 @@ int64_t retro_vfs_file_read_impl(libretro_vfs_implementation_file *stream,
if ((stream->hints & RFILE_HINT_UNBUFFERED) == 0) if ((stream->hints & RFILE_HINT_UNBUFFERED) == 0)
{ {
#ifdef HAVE_CDROM
if (stream->scheme == VFS_SCHEME_CDROM)
return retro_vfs_file_read_cdrom(stream, s, len);
#endif
#ifdef ORBIS #ifdef ORBIS
if (orbisRead(stream->fd, s, (size_t)len) < 0) if (orbisRead(stream->fd, s, (size_t)len) < 0)
return -1; return -1;
return 0; return 0;
#else #else
#ifdef HAVE_CDROM return fread(s, 1, (size_t)len, stream->fp);
if (stream->scheme == VFS_SCHEME_CDROM)
return retro_vfs_file_read_cdrom(stream, s, len);
else
#endif
return fread(s, 1, (size_t)len, stream->fp);
#endif #endif
} }
#ifdef HAVE_MMAP #ifdef HAVE_MMAP