QDirListing: minor code cleanup

Change-Id: I37144958c67dd116972e2822868e29684c406757
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
bb10
Ahmad Samir 2024-02-05 00:54:31 +02:00
parent 70096b2bbd
commit 61c9b8bb28
1 changed files with 32 additions and 31 deletions

View File

@ -133,11 +133,10 @@ void QDirListingPrivate::init(bool resolveEngine = true)
#if QT_CONFIG(regularexpression)
nameRegExps.reserve(nameFilters.size());
for (const auto &filter : nameFilters) {
auto re = QRegularExpression::fromWildcard(filter, (filters & QDir::CaseSensitive ?
Qt::CaseSensitive : Qt::CaseInsensitive));
nameRegExps.append(re);
}
const auto cs = filters.testAnyFlags(QDir::CaseSensitive) ? Qt::CaseSensitive
: Qt::CaseInsensitive;
for (const auto &filter : nameFilters)
nameRegExps.emplace_back(QRegularExpression::fromWildcard(filter, cs));
#endif
if (resolveEngine)
@ -149,12 +148,14 @@ void QDirListingPrivate::init(bool resolveEngine = true)
void QDirListingPrivate::pushDirectory(QDirEntryInfo &entryInfo)
{
QString path = entryInfo.filePath();
const QString path = [&entryInfo] {
#ifdef Q_OS_WIN
if (entryInfo.isSymLink())
path = entryInfo.canonicalFilePath();
if (entryInfo.isSymLink())
return entryInfo.canonicalFilePath();
#endif
return entryInfo.filePath();
}();
if (iteratorFlags.testAnyFlags(QDirListing::IteratorFlag::FollowSymlinks)) {
// Stop link loops
@ -300,16 +301,12 @@ bool QDirListingPrivate::matchesFilters(QDirEntryInfo &entryInfo) const
// name filter
#if QT_CONFIG(regularexpression)
// Pass all entries through name filters, except dirs if the AllDirs
if (!nameFilters.isEmpty() && !(filters.testAnyFlags(QDir::AllDirs) && entryInfo.isDir())) {
bool matched = false;
for (const auto &re : nameRegExps) {
if (re.match(fileName).hasMatch()) {
matched = true;
break;
}
}
if (!matched)
// Pass all entries through name filters, except dirs if AllDirs is set
if (!nameRegExps.isEmpty() && !(filters.testAnyFlags(QDir::AllDirs) && entryInfo.isDir())) {
auto regexMatchesName = [&fileName](const auto &re) {
return re.match(fileName).hasMatch();
};
if (std::none_of(nameRegExps.cbegin(), nameRegExps.cend(), regexMatchesName))
return false;
}
#endif
@ -328,9 +325,12 @@ bool QDirListingPrivate::matchesFilters(QDirEntryInfo &entryInfo) const
return false;
// filter system files
if (!includeSystem && (!(entryInfo.isFile() || entryInfo.isDir() || entryInfo.isSymLink())
|| (!entryInfo.exists() && entryInfo.isSymLink())))
return false;
if (!includeSystem) {
if (!entryInfo.isFile() && !entryInfo.isDir() && !entryInfo.isSymLink())
return false;
if (entryInfo.isSymLink() && !entryInfo.exists())
return false;
}
// skip directories
const bool skipDirs = !(filters & (QDir::Dirs | QDir::AllDirs));
@ -344,16 +344,17 @@ bool QDirListingPrivate::matchesFilters(QDirEntryInfo &entryInfo) const
return false;
// filter permissions
const bool filterPermissions = ((filters & QDir::PermissionMask)
&& (filters & QDir::PermissionMask) != QDir::PermissionMask);
const bool doWritable = !filterPermissions || (filters & QDir::Writable);
const bool doExecutable = !filterPermissions || (filters & QDir::Executable);
const bool doReadable = !filterPermissions || (filters & QDir::Readable);
if (filterPermissions
&& ((doReadable && !entryInfo.isReadable())
const auto perms = filters & QDir::PermissionMask;
const bool filterPermissions = perms != 0 && perms != QDir::PermissionMask;
if (filterPermissions) {
const bool doWritable = filters.testAnyFlags(QDir::Writable);
const bool doExecutable = filters.testAnyFlags(QDir::Executable);
const bool doReadable = filters.testAnyFlags(QDir::Readable);
if ((doReadable && !entryInfo.isReadable())
|| (doWritable && !entryInfo.isWritable())
|| (doExecutable && !entryInfo.isExecutable()))) {
return false;
|| (doExecutable && !entryInfo.isExecutable())) {
return false;
}
}
return true;