mirror of
https://github.com/libretro/RetroArch
synced 2025-03-24 04:44:02 +00:00
Improved vfs implementation on PSL1GHT using lv2 functions
This commit is contained in:
parent
575e2dcff6
commit
96a1320977
@ -614,4 +614,32 @@ extern int audioAddData(uint32_t portNum, float *data,
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*============================================================
|
||||||
|
FS PROTOTYPES
|
||||||
|
============================================================ */
|
||||||
|
#define FS_SUCCEEDED 0
|
||||||
|
#define FS_TYPE_DIR 1
|
||||||
|
#ifdef __PSL1GHT__
|
||||||
|
#include <lv2/sysfs.h>
|
||||||
|
#define O_RDONLY SYS_O_RDONLY
|
||||||
|
#define O_WRONLY SYS_O_WRONLY
|
||||||
|
#define O_CREAT SYS_O_CREAT
|
||||||
|
#define O_TRUNC SYS_O_TRUNC
|
||||||
|
#define O_RDWR SYS_O_RDWR
|
||||||
|
#else
|
||||||
|
#include <cell/cell_fs.h>
|
||||||
|
#define O_RDONLY CELL_FS_O_RDONLY
|
||||||
|
#define O_WRONLY CELL_FS_O_WRONLY
|
||||||
|
#define O_CREAT CELL_FS_O_CREAT
|
||||||
|
#define O_TRUNC CELL_FS_O_TRUNC
|
||||||
|
#define O_RDWR CELL_FS_O_RDWR
|
||||||
|
#define sysFsStat cellFsStat
|
||||||
|
#define sysFSStat CellFsStat
|
||||||
|
#define sysFSDirent CellFsDirent
|
||||||
|
#define sysFsOpendir cellFsOpendir
|
||||||
|
#define sysFsReaddir cellFsReaddir
|
||||||
|
#define sysFSDirent CellFsDirent
|
||||||
|
#define sysFsClosedir cellFsClosedir
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -130,6 +130,10 @@
|
|||||||
#include <pspkernel.h>
|
#include <pspkernel.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(__PSL1GHT__)
|
||||||
|
#include <lv2/sysfs.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(VITA)
|
#if defined(VITA)
|
||||||
#define FIO_S_ISDIR SCE_S_ISDIR
|
#define FIO_S_ISDIR SCE_S_ISDIR
|
||||||
#endif
|
#endif
|
||||||
@ -909,6 +913,19 @@ int retro_vfs_stat_impl(const char *path, int32_t *size)
|
|||||||
orbisDclose(dir_ret);
|
orbisDclose(dir_ret);
|
||||||
|
|
||||||
is_character_special = S_ISCHR(buf.st_mode);
|
is_character_special = S_ISCHR(buf.st_mode);
|
||||||
|
#elif defined(__PSL1GHT__) || defined(__PS3__)
|
||||||
|
/* Lowlevel Lv2 */
|
||||||
|
sysFSStat buf;
|
||||||
|
|
||||||
|
if (!path || !*path)
|
||||||
|
return 0;
|
||||||
|
if (sysFsStat(path, &buf) < 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (size)
|
||||||
|
*size = (int32_t)buf.st_size;
|
||||||
|
|
||||||
|
is_dir = ((buf.st_mode & S_IFMT) == S_IFDIR);
|
||||||
#elif defined(_WIN32)
|
#elif defined(_WIN32)
|
||||||
/* Windows */
|
/* Windows */
|
||||||
DWORD file_info;
|
DWORD file_info;
|
||||||
@ -1081,6 +1098,10 @@ struct libretro_vfs_implementation_dir
|
|||||||
#elif defined(VITA) || defined(PSP)
|
#elif defined(VITA) || defined(PSP)
|
||||||
SceUID directory;
|
SceUID directory;
|
||||||
SceIoDirent entry;
|
SceIoDirent entry;
|
||||||
|
#elif defined(__PSL1GHT__) || defined(__PS3__)
|
||||||
|
int error;
|
||||||
|
int directory;
|
||||||
|
sysFSDirent entry;
|
||||||
#elif defined(ORBIS)
|
#elif defined(ORBIS)
|
||||||
int directory;
|
int directory;
|
||||||
struct dirent entry;
|
struct dirent entry;
|
||||||
@ -1096,6 +1117,8 @@ static bool dirent_check_error(libretro_vfs_implementation_dir *rdir)
|
|||||||
return (rdir->directory == INVALID_HANDLE_VALUE);
|
return (rdir->directory == INVALID_HANDLE_VALUE);
|
||||||
#elif defined(VITA) || defined(PSP) || defined(ORBIS)
|
#elif defined(VITA) || defined(PSP) || defined(ORBIS)
|
||||||
return (rdir->directory < 0);
|
return (rdir->directory < 0);
|
||||||
|
#elif defined(__PSL1GHT__) || defined(__PS3__)
|
||||||
|
return (rdir->error != FS_SUCCEEDED);
|
||||||
#else
|
#else
|
||||||
return !(rdir->directory);
|
return !(rdir->directory);
|
||||||
#endif
|
#endif
|
||||||
@ -1159,6 +1182,8 @@ libretro_vfs_implementation_dir *retro_vfs_opendir_impl(
|
|||||||
#elif defined(_3DS)
|
#elif defined(_3DS)
|
||||||
rdir->directory = !string_is_empty(name) ? opendir(name) : NULL;
|
rdir->directory = !string_is_empty(name) ? opendir(name) : NULL;
|
||||||
rdir->entry = NULL;
|
rdir->entry = NULL;
|
||||||
|
#elif defined(__PSL1GHT__) || defined(__PS3__)
|
||||||
|
rdir->error = sysFsOpendir(name, &rdir->directory);
|
||||||
#elif defined(ORBIS)
|
#elif defined(ORBIS)
|
||||||
rdir->directory = orbisDopen(name);
|
rdir->directory = orbisDopen(name);
|
||||||
#else
|
#else
|
||||||
@ -1194,6 +1219,10 @@ bool retro_vfs_readdir_impl(libretro_vfs_implementation_dir *rdir)
|
|||||||
return (rdir->directory != INVALID_HANDLE_VALUE);
|
return (rdir->directory != INVALID_HANDLE_VALUE);
|
||||||
#elif defined(VITA) || defined(PSP)
|
#elif defined(VITA) || defined(PSP)
|
||||||
return (sceIoDread(rdir->directory, &rdir->entry) > 0);
|
return (sceIoDread(rdir->directory, &rdir->entry) > 0);
|
||||||
|
#elif defined(__PSL1GHT__) || defined(__PS3__)
|
||||||
|
uint64_t nread;
|
||||||
|
rdir->error = sysFsReaddir(rdir->directory, &rdir->entry, &nread);
|
||||||
|
return (nread != 0);
|
||||||
#elif defined(ORBIS)
|
#elif defined(ORBIS)
|
||||||
return (orbisDread(rdir->directory, &rdir->entry) > 0);
|
return (orbisDread(rdir->directory, &rdir->entry) > 0);
|
||||||
#else
|
#else
|
||||||
@ -1214,7 +1243,7 @@ const char *retro_vfs_dirent_get_name_impl(libretro_vfs_implementation_dir *rdir
|
|||||||
if (name)
|
if (name)
|
||||||
free(name);
|
free(name);
|
||||||
return (char*)rdir->entry.cFileName;
|
return (char*)rdir->entry.cFileName;
|
||||||
#elif defined(VITA) || defined(PSP) || defined(ORBIS)
|
#elif defined(VITA) || defined(PSP) || defined(ORBIS) || defined(__PSL1GHT__) || defined(__PS3__)
|
||||||
return rdir->entry.d_name;
|
return rdir->entry.d_name;
|
||||||
#else
|
#else
|
||||||
if (!rdir || !rdir->entry)
|
if (!rdir || !rdir->entry)
|
||||||
@ -1235,6 +1264,9 @@ bool retro_vfs_dirent_is_dir_impl(libretro_vfs_implementation_dir *rdir)
|
|||||||
#elif defined(VITA)
|
#elif defined(VITA)
|
||||||
return SCE_S_ISDIR(entry->d_stat.st_mode);
|
return SCE_S_ISDIR(entry->d_stat.st_mode);
|
||||||
#endif
|
#endif
|
||||||
|
#elif defined(__PSL1GHT__) || defined(__PS3__)
|
||||||
|
sysFSDirent *entry = (sysFSDirent*)&rdir->entry;
|
||||||
|
return (entry->d_type == FS_TYPE_DIR);
|
||||||
#elif defined(ORBIS)
|
#elif defined(ORBIS)
|
||||||
const struct dirent *entry = &rdir->entry;
|
const struct dirent *entry = &rdir->entry;
|
||||||
if (entry->d_type == DT_DIR)
|
if (entry->d_type == DT_DIR)
|
||||||
@ -1271,6 +1303,8 @@ int retro_vfs_closedir_impl(libretro_vfs_implementation_dir *rdir)
|
|||||||
FindClose(rdir->directory);
|
FindClose(rdir->directory);
|
||||||
#elif defined(VITA) || defined(PSP)
|
#elif defined(VITA) || defined(PSP)
|
||||||
sceIoDclose(rdir->directory);
|
sceIoDclose(rdir->directory);
|
||||||
|
#elif defined(__PSL1GHT__) || defined(__PS3__)
|
||||||
|
rdir->error = sysFsClosedir(rdir->directory);
|
||||||
#elif defined(ORBIS)
|
#elif defined(ORBIS)
|
||||||
orbisDclose(rdir->directory);
|
orbisDclose(rdir->directory);
|
||||||
#else
|
#else
|
||||||
|
Loading…
x
Reference in New Issue
Block a user