QNX: Remember information on whether a file is a link
authorThomas McGuire <thomas.mcguire.qnx@kdab.com>
Mon, 29 Oct 2012 11:00:14 +0000 (12:00 +0100)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Tue, 30 Oct 2012 11:53:46 +0000 (12:53 +0100)
This avoids an additional call to lstat() When using QDir::entryList()
with the QDir::NoSymLinks flag.

Change-Id: I3b602546c6a4502ae25a5748a12c60e69325bb5d
Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
Reviewed-by: Kevin Krammer <kevin.krammer@kdab.com>
Reviewed-by: João Abecasis <joao@abecasis.name>
src/corelib/io/qfilesystemengine.cpp

index fe06210..8707aec 100644 (file)
@@ -300,6 +300,13 @@ void QFileSystemMetaData::fillFromDirEnt(const QT_DIRENT &entry)
             const struct dirent_extra_stat * const extra_stat =
                     reinterpret_cast<struct dirent_extra_stat *>(extra);
 
+            // Remember whether this was a link or not, this saves an lstat() call later.
+            if (extra->d_type == _DTYPE_LSTAT) {
+                knownFlagsMask |= QFileSystemMetaData::LinkType;
+                if (S_ISLNK(extra_stat->d_stat.st_mode))
+                    entryFlags |= QFileSystemMetaData::LinkType;
+            }
+
             // For symlinks, the extra type _DTYPE_LSTAT doesn't work for filling out the meta data,
             // as we need the stat() information there, not the lstat() information.
             // In this case, don't use the extra information.