- fixed I_FindAttr() to handle symlinks on POSIX platforms

This commit is contained in:
alexey.lysiuk 2020-01-26 11:03:28 +02:00 committed by drfrag
parent 3b89c2fd34
commit 8b5131eeaa
2 changed files with 13 additions and 4 deletions

View file

@ -112,9 +112,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);

View file

@ -19,14 +19,13 @@
//-----------------------------------------------------------------------------
//
#include <stdio.h>
#include <errno.h>
#include <fnmatch.h>
#ifdef __APPLE__
#include <AvailabilityMacros.h>
#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;
}