From 520200d5978e4a870d9cbd8a7b71883e4329711b Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Sun, 4 Dec 2011 13:02:00 +0200 Subject: Check symlinks with stat() to know if they are directories or not --- src/filesys.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'src/filesys.cpp') diff --git a/src/filesys.cpp b/src/filesys.cpp index 4a01becbf..a65515d03 100644 --- a/src/filesys.cpp +++ b/src/filesys.cpp @@ -196,18 +196,19 @@ std::vector GetDirListing(std::string pathstring) int isdir = -1; // -1 means unknown /* - POSIX doesn't define d_type member of - struct dirent and certain filesystems on - glibc/Linux will only return DT_UNKNOWN for - the d_type member. + POSIX doesn't define d_type member of struct dirent and + certain filesystems on glibc/Linux will only return + DT_UNKNOWN for the d_type member. + + Also we don't know whether symlinks are directories or not. */ #ifdef _DIRENT_HAVE_D_TYPE - if(dirp->d_type != DT_UNKNOWN) + if(dirp->d_type != DT_UNKNOWN && dirp->d_type != DT_LNK) isdir = (dirp->d_type == DT_DIR); #endif /* _DIRENT_HAVE_D_TYPE */ /* - Was d_type DT_UNKNOWN (or nonexistent)? + Was d_type DT_UNKNOWN, DT_LNK or nonexistent? If so, try stat(). */ if(isdir == -1) -- cgit v1.2.3