diff --git a/src/corelib/io/qdiriterator.cpp b/src/corelib/io/qdiriterator.cpp index f6d337bb74..7128435aa4 100644 --- a/src/corelib/io/qdiriterator.cpp +++ b/src/corelib/io/qdiriterator.cpp @@ -108,6 +108,7 @@ #include #include #include +#include #include @@ -159,7 +160,7 @@ public: QFileInfo nextFileInfo; // Loop protection - QSet visitedLinks; + QDuplicateTracker visitedLinks; }; /*! @@ -210,12 +211,11 @@ void QDirIteratorPrivate::pushDirectory(const QFileInfo &fileInfo) path = fileInfo.canonicalFilePath(); #endif - // Stop link loops - if (visitedLinks.contains(fileInfo.canonicalFilePath())) - return; - - if (iteratorFlags & QDirIterator::FollowSymlinks) - visitedLinks << fileInfo.canonicalFilePath(); + if ((iteratorFlags & QDirIterator::FollowSymlinks)) { + // Stop link loops + if (visitedLinks.hasSeen(fileInfo.canonicalFilePath())) + return; + } if (engine) { engine->setFileName(path);