diff --git a/libretro-common/file/retro_dirent.c b/libretro-common/file/retro_dirent.c index 18370fe942..26f3e8a897 100644 --- a/libretro-common/file/retro_dirent.c +++ b/libretro-common/file/retro_dirent.c @@ -157,45 +157,6 @@ const char *retro_dirent_get_name(struct RDIR *rdir) #endif } -static bool path_is_directory_internal(const char *path) -{ -#if defined(VITA) || defined(PSP) - SceIoStat buf; - char *tmp = strdup(path); - size_t len = strlen(tmp); - if (tmp[len-1] == '/') - tmp[len-1]='\0'; - - if (sceIoGetstat(tmp, &buf) < 0) - { - free(tmp); - return false; - } - free(tmp); - - return FIO_S_ISDIR(buf.st_mode); -#elif defined(__CELLOS_LV2__) - CellFsStat buf; - if (cellFsStat(path, &buf) < 0) - return false; - return ((buf.st_mode & S_IFMT) == S_IFDIR); -#elif defined(_WIN32) - struct _stat buf; - DWORD file_info = GetFileAttributes(path); - - _stat(path, &buf); - - if (file_info == INVALID_FILE_ATTRIBUTES) - return false; - return (file_info & FILE_ATTRIBUTE_DIRECTORY); -#else - struct stat buf; - if (stat(path, &buf) < 0) - return false; - return S_ISDIR(buf.st_mode); -#endif -} - /** * * retro_dirent_is_dir: @@ -222,17 +183,20 @@ bool retro_dirent_is_dir(struct RDIR *rdir, const char *path) #elif defined(__CELLOS_LV2__) CellFsDirent *entry = (CellFsDirent*)&rdir->entry; return (entry->d_type == CELL_FS_TYPE_DIRECTORY); -#elif defined(DT_DIR) +#else + struct stat buf; +#if defined(DT_DIR) const struct dirent *entry = (const struct dirent*)rdir->entry; if (entry->d_type == DT_DIR) return true; /* This can happen on certain file systems. */ - if (entry->d_type == DT_UNKNOWN || entry->d_type == DT_LNK) - return path_is_directory_internal(path); - return false; -#else + if (!(entry->d_type == DT_UNKNOWN || entry->d_type == DT_LNK)) + return false; +#endif /* dirent struct doesn't have d_type, do it the slow way ... */ - return path_is_directory_internal(path); + if (stat(path, &buf) < 0) + return false; + return S_ISDIR(buf.st_mode); #endif }