diff --git a/src/posix/i_system.h b/src/posix/i_system.h index 7e5770b52..e4c3d68db 100644 --- a/src/posix/i_system.h +++ b/src/posix/i_system.h @@ -111,9 +111,10 @@ bool I_SetCursor(FTexture *); struct findstate_t { private: - int count; + FString path; struct dirent **namelist; int current; + int count; friend void *I_FindFirst(const char *filespec, findstate_t *fileinfo); friend int I_FindNext(void *handle, findstate_t *fileinfo); diff --git a/src/posix/i_system_posix.cpp b/src/posix/i_system_posix.cpp index 7c6514395..a3b356317 100644 --- a/src/posix/i_system_posix.cpp +++ b/src/posix/i_system_posix.cpp @@ -19,14 +19,13 @@ //----------------------------------------------------------------------------- // -#include -#include #include #ifdef __APPLE__ #include #endif // __APPLE__ +#include "cmdlib.h" #include "d_protocol.h" #include "i_system.h" #include "gameconfigfile.h" @@ -90,6 +89,7 @@ void *I_FindFirst(const char *const filespec, findstate_t *const fileinfo) { pattern = slash + 1; dir = FString(filespec, slash - filespec + 1); + fileinfo->path = dir; } else { @@ -142,7 +142,15 @@ int I_FindClose(void *const handle) int I_FindAttr(findstate_t *const fileinfo) { dirent *const ent = fileinfo->namelist[fileinfo->current]; - return (ent->d_type & DT_DIR) ? FA_DIREC : 0; + const FString path = fileinfo->path + ent->d_name; + bool isdir; + + if (DirEntryExists(path, &isdir)) + { + return isdir ? FA_DIREC : 0; + } + + return 0; }