From 9ef5570fcc52ee250be2f53c2fb0e82a7fc4482b Mon Sep 17 00:00:00 2001 From: twinaphex Date: Fri, 4 Sep 2015 19:11:20 +0200 Subject: [PATCH] (retro_dirent.c) Add PS3 codepaths --- libretro-common/file/retro_dirent.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/libretro-common/file/retro_dirent.c b/libretro-common/file/retro_dirent.c index ccba119a57..c04ee6a40a 100644 --- a/libretro-common/file/retro_dirent.c +++ b/libretro-common/file/retro_dirent.c @@ -26,6 +26,10 @@ #include #endif +#ifdef __CELLOS_LV2__ +#include +#endif + #include struct RDIR @@ -36,6 +40,10 @@ struct RDIR #elif defined(VITA) || defined(PSP) SceUID directory; SceIoDirent entry; +#elif defined(__CELLOS_LV2__) + CellFsErrno error; + int directory; + CellFsDirent entry; #else DIR *directory; const struct dirent *entry; @@ -58,6 +66,8 @@ struct RDIR *retro_opendir(const char *name) #elif defined(VITA) || defined(PSP) rdir->directory = sceIoDopen(name); rdir->entry = NULL; +#elif defined(__CELLOS_LV2__) + rdir->error = cellFsOpendir(name, &rdir->directory); #else rdir->directory = opendir(name); rdir->entry = NULL; @@ -72,6 +82,8 @@ bool retro_dirent_error(struct RDIR *rdir) return (rdir->directory == INVALID_HANDLE_VALUE); #elif defined(VITA) || defined(PSP) return (rdir->directory < 0); +#elif defined(__CELLOS_LV2__) + return (rdir->error != CELL_FS_SUCCEEDED); #else return !(rdir->directory); #endif @@ -83,6 +95,10 @@ int retro_readdir(struct RDIR *rdir) return (FindNextFile(rdir->directory, &rdir->entry) != 0); #elif defined(VITA) || defined(PSP) return (sceIoDread(rdir->directory, &rdir->entry) > 0); +#elif defined(__CELLOS_LV2__) + uint64_t nread; + rdir->error = cellFsReaddir(rdir->directory, &rdir->entry, &nread); + return (nread != 0); #else return ((rdir->entry = readdir(rdir->directory)) != NULL); #endif @@ -92,7 +108,7 @@ const char *retro_dirent_get_name(struct RDIR *rdir) { #if defined(_WIN32) return rdir->entry.cFileName; -#elif defined(VITA) || defined(PSP) +#elif defined(VITA) || defined(PSP) || defined(__CELLOS_LV2__) return rdir->entry.d_name; #else return rdir->entry->d_name; @@ -130,6 +146,9 @@ bool retro_dirent_is_dir(struct RDIR *rdir, const char *path) #elif defined(VITA) return PSP2_S_ISDIR(entry->d_stat.st_mode); #endif +#elif defined(__CELLOS_LV2__) + CellFsDirent *entry = (CellFsDirent*)&rdir->entry; + return (entry->d_type == CELL_FS_TYPE_DIRECTORY); #elif defined(DT_DIR) const struct dirent *entry = (const struct dirent*)rdir->entry; if (entry->d_type == DT_DIR) @@ -163,6 +182,8 @@ void retro_closedir(struct RDIR *rdir) FindClose(rdir->directory); #elif defined(VITA) || defined(PSP) sceIoDclose(rdir->directory); +#elif defined(__CELLOS_LV2__) + rdir->error = cellFsClosedir(rdir->directory); #else if (rdir->directory) closedir(rdir->directory);