This commit is contained in:
twinaphex 2020-06-27 13:58:15 +02:00
parent b0b588a56a
commit c1275cc83d
1 changed files with 32 additions and 50 deletions

View File

@ -844,12 +844,12 @@ const char *retro_vfs_file_get_path_impl(
int retro_vfs_stat_impl(const char *path, int32_t *size) int retro_vfs_stat_impl(const char *path, int32_t *size)
{ {
bool is_dir = false;
bool is_character_special = false;
#if defined(VITA) || defined(PSP) #if defined(VITA) || defined(PSP)
/* Vita / PSP */ /* Vita / PSP */
SceIoStat buf; SceIoStat buf;
int stat_ret; int dir_ret;
bool is_dir = false;
bool is_character_special = false;
char *tmp = NULL; char *tmp = NULL;
size_t len = 0; size_t len = 0;
@ -861,22 +861,18 @@ int retro_vfs_stat_impl(const char *path, int32_t *size)
if (tmp[len-1] == '/') if (tmp[len-1] == '/')
tmp[len-1] = '\0'; tmp[len-1] = '\0';
stat_ret = sceIoGetstat(tmp, &buf); dir_ret = sceIoGetstat(tmp, &buf);
free(tmp); free(tmp);
if (stat_ret < 0) if (dir_ret < 0)
return 0; return 0;
if (size) if (size)
*size = (int32_t)buf.st_size; *size = (int32_t)buf.st_size;
is_dir = FIO_S_ISDIR(buf.st_mode); is_dir = FIO_S_ISDIR(buf.st_mode);
return RETRO_VFS_STAT_IS_VALID | (is_dir ? RETRO_VFS_STAT_IS_DIRECTORY : 0) | (is_character_special ? RETRO_VFS_STAT_IS_CHARACTER_SPECIAL : 0);
#elif defined(ORBIS) #elif defined(ORBIS)
/* Orbis */ /* Orbis */
bool is_dir, is_character_special; int dir_ret = 0;
int dir_ret;
if (!path || !*path) if (!path || !*path)
return 0; return 0;
@ -889,13 +885,8 @@ 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);
return RETRO_VFS_STAT_IS_VALID | (is_dir ? RETRO_VFS_STAT_IS_DIRECTORY : 0) | (is_character_special ? RETRO_VFS_STAT_IS_CHARACTER_SPECIAL : 0);
#elif defined(__CELLOS_LV2__) && !defined(__PSL1GHT__) #elif defined(__CELLOS_LV2__) && !defined(__PSL1GHT__)
/* CellOS Lv2 */ /* CellOS Lv2 */
bool is_dir;
bool is_character_special = false;
CellFsStat buf; CellFsStat buf;
if (!path || !*path) if (!path || !*path)
@ -908,14 +899,10 @@ int retro_vfs_stat_impl(const char *path, int32_t *size)
is_dir = ((buf.st_mode & S_IFMT) == S_IFDIR); is_dir = ((buf.st_mode & S_IFMT) == S_IFDIR);
return RETRO_VFS_STAT_IS_VALID | (is_dir ? RETRO_VFS_STAT_IS_DIRECTORY : 0) | (is_character_special ? RETRO_VFS_STAT_IS_CHARACTER_SPECIAL : 0);
#elif defined(_WIN32) #elif defined(_WIN32)
/* Windows */ /* Windows */
bool is_dir;
DWORD file_info; DWORD file_info;
struct _stat buf; struct _stat buf;
bool is_character_special = false;
#if defined(LEGACY_WIN32) #if defined(LEGACY_WIN32)
char *path_local = NULL; char *path_local = NULL;
#else #else
@ -951,12 +938,8 @@ int retro_vfs_stat_impl(const char *path, int32_t *size)
*size = (int32_t)buf.st_size; *size = (int32_t)buf.st_size;
is_dir = (file_info & FILE_ATTRIBUTE_DIRECTORY); is_dir = (file_info & FILE_ATTRIBUTE_DIRECTORY);
return RETRO_VFS_STAT_IS_VALID | (is_dir ? RETRO_VFS_STAT_IS_DIRECTORY : 0) | (is_character_special ? RETRO_VFS_STAT_IS_CHARACTER_SPECIAL : 0);
#else #else
/* Every other platform */ /* Every other platform */
bool is_dir, is_character_special;
struct stat buf; struct stat buf;
if (!path || !*path) if (!path || !*path)
@ -969,9 +952,8 @@ int retro_vfs_stat_impl(const char *path, int32_t *size)
is_dir = S_ISDIR(buf.st_mode); is_dir = S_ISDIR(buf.st_mode);
is_character_special = S_ISCHR(buf.st_mode); is_character_special = S_ISCHR(buf.st_mode);
return RETRO_VFS_STAT_IS_VALID | (is_dir ? RETRO_VFS_STAT_IS_DIRECTORY : 0) | (is_character_special ? RETRO_VFS_STAT_IS_CHARACTER_SPECIAL : 0);
#endif #endif
return RETRO_VFS_STAT_IS_VALID | (is_dir ? RETRO_VFS_STAT_IS_DIRECTORY : 0) | (is_character_special ? RETRO_VFS_STAT_IS_CHARACTER_SPECIAL : 0);
} }
#if defined(VITA) #if defined(VITA)
@ -988,13 +970,13 @@ int retro_vfs_mkdir_impl(const char *dir)
#ifdef LEGACY_WIN32 #ifdef LEGACY_WIN32
int ret = _mkdir(dir); int ret = _mkdir(dir);
#else #else
wchar_t *dirW = utf8_to_utf16_string_alloc(dir); wchar_t *dir_w = utf8_to_utf16_string_alloc(dir);
int ret = -1; int ret = -1;
if (dirW) if (dir_w)
{ {
ret = _wmkdir(dirW); ret = _wmkdir(dir_w);
free(dirW); free(dir_w);
} }
#endif #endif
#elif defined(IOS) #elif defined(IOS)
@ -1170,12 +1152,12 @@ const char *retro_vfs_dirent_get_name_impl(libretro_vfs_implementation_dir *rdir
#if defined(_WIN32) #if defined(_WIN32)
#if defined(LEGACY_WIN32) #if defined(LEGACY_WIN32)
{ {
char *name_local = local_to_utf8_string_alloc(rdir->entry.cFileName); char *name = local_to_utf8_string_alloc(rdir->entry.cFileName);
memset(rdir->entry.cFileName, 0, sizeof(rdir->entry.cFileName)); memset(rdir->entry.cFileName, 0, sizeof(rdir->entry.cFileName));
strlcpy(rdir->entry.cFileName, name_local, sizeof(rdir->entry.cFileName)); strlcpy(rdir->entry.cFileName, name, sizeof(rdir->entry.cFileName));
if (name_local) if (name)
free(name_local); free(name);
} }
#else #else
{ {