Skip to content

Commit

Permalink
- fixed I_FindAttr() to handle symlinks on POSIX platforms
Browse files Browse the repository at this point in the history
  • Loading branch information
alexey-lysiuk committed Jan 26, 2020
1 parent d425d8d commit f9906ae
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 4 deletions.
3 changes: 2 additions & 1 deletion src/posix/i_system.h
Expand Up @@ -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);
Expand Down
14 changes: 11 additions & 3 deletions src/posix/i_system_posix.cpp
Expand Up @@ -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"
Expand Down Expand Up @@ -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
{
Expand Down Expand Up @@ -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;
}


Expand Down

0 comments on commit f9906ae

Please sign in to comment.