diff options
Diffstat (limited to 'src/corelib/io/qfileinfo.cpp')
-rw-r--r-- | src/corelib/io/qfileinfo.cpp | 193 |
1 files changed, 70 insertions, 123 deletions
diff --git a/src/corelib/io/qfileinfo.cpp b/src/corelib/io/qfileinfo.cpp index 104a171e99..235e391aa0 100644 --- a/src/corelib/io/qfileinfo.cpp +++ b/src/corelib/io/qfileinfo.cpp @@ -591,9 +591,6 @@ QString QFileInfo::absolutePath() const if (d->isDefaultConstructed) { return QLatin1String(""); - } else if (d->fileEntry.isEmpty()) { - qWarning("QFileInfo::absolutePath: Constructed with empty filename"); - return QLatin1String(""); } return d->getFileName(QAbstractFileEngine::AbsolutePathName); } @@ -913,14 +910,10 @@ QDir QFileInfo::absoluteDir() const bool QFileInfo::isReadable() const { Q_D(const QFileInfo); - if (d->isDefaultConstructed) - return false; - if (d->fileEngine == 0) { - if (!d->cache_enabled || !d->metaData.hasFlags(QFileSystemMetaData::UserReadPermission)) - QFileSystemEngine::fillMetaData(d->fileEntry, d->metaData, QFileSystemMetaData::UserReadPermission); - return (d->metaData.permissions() & QFile::ReadUser) != 0; - } - return d->getFileFlags(QAbstractFileEngine::ReadUserPerm); + return d->checkAttribute<bool>( + QFileSystemMetaData::UserReadPermission, + [d]() { return (d->metaData.permissions() & QFile::ReadUser) != 0; }, + [d]() { return d->getFileFlags(QAbstractFileEngine::ReadUserPerm); }); } /*! @@ -934,14 +927,10 @@ bool QFileInfo::isReadable() const bool QFileInfo::isWritable() const { Q_D(const QFileInfo); - if (d->isDefaultConstructed) - return false; - if (d->fileEngine == 0) { - if (!d->cache_enabled || !d->metaData.hasFlags(QFileSystemMetaData::UserWritePermission)) - QFileSystemEngine::fillMetaData(d->fileEntry, d->metaData, QFileSystemMetaData::UserWritePermission); - return (d->metaData.permissions() & QFile::WriteUser) != 0; - } - return d->getFileFlags(QAbstractFileEngine::WriteUserPerm); + return d->checkAttribute<bool>( + QFileSystemMetaData::UserWritePermission, + [d]() { return (d->metaData.permissions() & QFile::WriteUser) != 0; }, + [d]() { return d->getFileFlags(QAbstractFileEngine::WriteUserPerm); }); } /*! @@ -952,14 +941,10 @@ bool QFileInfo::isWritable() const bool QFileInfo::isExecutable() const { Q_D(const QFileInfo); - if (d->isDefaultConstructed) - return false; - if (d->fileEngine == 0) { - if (!d->cache_enabled || !d->metaData.hasFlags(QFileSystemMetaData::UserExecutePermission)) - QFileSystemEngine::fillMetaData(d->fileEntry, d->metaData, QFileSystemMetaData::UserExecutePermission); - return (d->metaData.permissions() & QFile::ExeUser) != 0; - } - return d->getFileFlags(QAbstractFileEngine::ExeUserPerm); + return d->checkAttribute<bool>( + QFileSystemMetaData::UserExecutePermission, + [d]() { return (d->metaData.permissions() & QFile::ExeUser) != 0; }, + [d]() { return d->getFileFlags(QAbstractFileEngine::ExeUserPerm); }); } /*! @@ -971,14 +956,10 @@ bool QFileInfo::isExecutable() const bool QFileInfo::isHidden() const { Q_D(const QFileInfo); - if (d->isDefaultConstructed) - return false; - if (d->fileEngine == 0) { - if (!d->cache_enabled || !d->metaData.hasFlags(QFileSystemMetaData::HiddenAttribute)) - QFileSystemEngine::fillMetaData(d->fileEntry, d->metaData, QFileSystemMetaData::HiddenAttribute); - return d->metaData.isHidden(); - } - return d->getFileFlags(QAbstractFileEngine::HiddenFlag); + return d->checkAttribute<bool>( + QFileSystemMetaData::HiddenAttribute, + [d]() { return d->metaData.isHidden(); }, + [d]() { return d->getFileFlags(QAbstractFileEngine::HiddenFlag); }); } /*! @@ -1014,14 +995,10 @@ bool QFileInfo::isNativePath() const bool QFileInfo::isFile() const { Q_D(const QFileInfo); - if (d->isDefaultConstructed) - return false; - if (d->fileEngine == 0) { - if (!d->cache_enabled || !d->metaData.hasFlags(QFileSystemMetaData::FileType)) - QFileSystemEngine::fillMetaData(d->fileEntry, d->metaData, QFileSystemMetaData::FileType); - return d->metaData.isFile(); - } - return d->getFileFlags(QAbstractFileEngine::FileType); + return d->checkAttribute<bool>( + QFileSystemMetaData::FileType, + [d]() { return d->metaData.isFile(); }, + [d]() { return d->getFileFlags(QAbstractFileEngine::FileType); }); } /*! @@ -1033,14 +1010,10 @@ bool QFileInfo::isFile() const bool QFileInfo::isDir() const { Q_D(const QFileInfo); - if (d->isDefaultConstructed) - return false; - if (d->fileEngine == 0) { - if (!d->cache_enabled || !d->metaData.hasFlags(QFileSystemMetaData::DirectoryType)) - QFileSystemEngine::fillMetaData(d->fileEntry, d->metaData, QFileSystemMetaData::DirectoryType); - return d->metaData.isDirectory(); - } - return d->getFileFlags(QAbstractFileEngine::DirectoryType); + return d->checkAttribute<bool>( + QFileSystemMetaData::DirectoryType, + [d]() { return d->metaData.isDirectory(); }, + [d]() { return d->getFileFlags(QAbstractFileEngine::DirectoryType); }); } @@ -1054,14 +1027,10 @@ bool QFileInfo::isDir() const bool QFileInfo::isBundle() const { Q_D(const QFileInfo); - if (d->isDefaultConstructed) - return false; - if (d->fileEngine == 0) { - if (!d->cache_enabled || !d->metaData.hasFlags(QFileSystemMetaData::BundleType)) - QFileSystemEngine::fillMetaData(d->fileEntry, d->metaData, QFileSystemMetaData::BundleType); - return d->metaData.isBundle(); - } - return d->getFileFlags(QAbstractFileEngine::BundleType); + return d->checkAttribute<bool>( + QFileSystemMetaData::BundleType, + [d]() { return d->metaData.isBundle(); }, + [d]() { return d->getFileFlags(QAbstractFileEngine::BundleType); }); } /*! @@ -1084,14 +1053,10 @@ bool QFileInfo::isBundle() const bool QFileInfo::isSymLink() const { Q_D(const QFileInfo); - if (d->isDefaultConstructed) - return false; - if (d->fileEngine == 0) { - if (!d->cache_enabled || !d->metaData.hasFlags(QFileSystemMetaData::LegacyLinkType)) - QFileSystemEngine::fillMetaData(d->fileEntry, d->metaData, QFileSystemMetaData::LegacyLinkType); - return d->metaData.isLegacyLink(); - } - return d->getFileFlags(QAbstractFileEngine::LinkType); + return d->checkAttribute<bool>( + QFileSystemMetaData::LegacyLinkType, + [d]() { return d->metaData.isLegacyLink(); }, + [d]() { return d->getFileFlags(QAbstractFileEngine::LinkType); }); } /*! @@ -1103,7 +1068,7 @@ bool QFileInfo::isRoot() const { Q_D(const QFileInfo); if (d->isDefaultConstructed) - return true; + return false; if (d->fileEngine == 0) { if (d->fileEntry.isRoot()) { #if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) @@ -1179,14 +1144,10 @@ QString QFileInfo::owner() const uint QFileInfo::ownerId() const { Q_D(const QFileInfo); - if (d->isDefaultConstructed) - return 0; - if (d->fileEngine == 0) { - if (!d->cache_enabled || !d->metaData.hasFlags(QFileSystemMetaData::UserId)) - QFileSystemEngine::fillMetaData(d->fileEntry, d->metaData, QFileSystemMetaData::UserId); - return d->metaData.userId(); - } - return d->fileEngine->ownerId(QAbstractFileEngine::OwnerUser); + return d->checkAttribute(uint(-2), + QFileSystemMetaData::UserId, + [d]() { return d->metaData.userId(); }, + [d]() { return d->fileEngine->ownerId(QAbstractFileEngine::OwnerUser); }); } /*! @@ -1218,14 +1179,10 @@ QString QFileInfo::group() const uint QFileInfo::groupId() const { Q_D(const QFileInfo); - if (d->isDefaultConstructed) - return 0; - if (d->fileEngine == 0) { - if (!d->cache_enabled || !d->metaData.hasFlags(QFileSystemMetaData::GroupId)) - QFileSystemEngine::fillMetaData(d->fileEntry, d->metaData, QFileSystemMetaData::GroupId); - return d->metaData.groupId(); - } - return d->fileEngine->ownerId(QAbstractFileEngine::OwnerGroup); + return d->checkAttribute(uint(-2), + QFileSystemMetaData::GroupId, + [d]() { return d->metaData.groupId(); }, + [d]() { return d->fileEngine->ownerId(QAbstractFileEngine::OwnerGroup); }); } /*! @@ -1247,16 +1204,15 @@ uint QFileInfo::groupId() const bool QFileInfo::permission(QFile::Permissions permissions) const { Q_D(const QFileInfo); - if (d->isDefaultConstructed) - return false; - if (d->fileEngine == 0) { - // the QFileSystemMetaData::MetaDataFlag and QFile::Permissions overlap, so just static cast. - QFileSystemMetaData::MetaDataFlag permissionFlags = static_cast<QFileSystemMetaData::MetaDataFlag>((int)permissions); - if (!d->cache_enabled || !d->metaData.hasFlags(permissionFlags)) - QFileSystemEngine::fillMetaData(d->fileEntry, d->metaData, permissionFlags); - return (d->metaData.permissions() & permissions) == permissions; - } - return d->getFileFlags(QAbstractFileEngine::FileFlags((int)permissions)) == (uint)permissions; + // the QFileSystemMetaData::MetaDataFlag and QFile::Permissions overlap, so just cast. + auto fseFlags = QFileSystemMetaData::MetaDataFlag(int(permissions)); + auto feFlags = QAbstractFileEngine::FileFlags(int(permissions)); + return d->checkAttribute<bool>( + fseFlags, + [=]() { return (d->metaData.permissions() & permissions) == permissions; }, + [=]() { + return d->getFileFlags(feFlags) == uint(permissions); + }); } /*! @@ -1269,14 +1225,12 @@ bool QFileInfo::permission(QFile::Permissions permissions) const QFile::Permissions QFileInfo::permissions() const { Q_D(const QFileInfo); - if (d->isDefaultConstructed) - return 0; - if (d->fileEngine == 0) { - if (!d->cache_enabled || !d->metaData.hasFlags(QFileSystemMetaData::Permissions)) - QFileSystemEngine::fillMetaData(d->fileEntry, d->metaData, QFileSystemMetaData::Permissions); - return d->metaData.permissions(); - } - return QFile::Permissions(d->getFileFlags(QAbstractFileEngine::PermsMask) & QAbstractFileEngine::PermsMask); + return d->checkAttribute<QFile::Permissions>( + QFileSystemMetaData::Permissions, + [d]() { return d->metaData.permissions(); }, + [d]() { + return QFile::Permissions(d->getFileFlags(QAbstractFileEngine::PermsMask) & QAbstractFileEngine::PermsMask); + }); } @@ -1289,18 +1243,16 @@ QFile::Permissions QFileInfo::permissions() const qint64 QFileInfo::size() const { Q_D(const QFileInfo); - if (d->isDefaultConstructed) - return 0; - if (d->fileEngine == 0) { - if (!d->cache_enabled || !d->metaData.hasFlags(QFileSystemMetaData::SizeAttribute)) - QFileSystemEngine::fillMetaData(d->fileEntry, d->metaData, QFileSystemMetaData::SizeAttribute); - return d->metaData.size(); - } - if (!d->getCachedFlag(QFileInfoPrivate::CachedSize)) { - d->setCachedFlag(QFileInfoPrivate::CachedSize); - d->fileSize = d->fileEngine->size(); - } - return d->fileSize; + return d->checkAttribute<qint64>( + QFileSystemMetaData::SizeAttribute, + [d]() { return d->metaData.size(); }, + [d]() { + if (!d->getCachedFlag(QFileInfoPrivate::CachedSize)) { + d->setCachedFlag(QFileInfoPrivate::CachedSize); + d->fileSize = d->fileEngine->size(); + } + return d->fileSize; + }); } #if QT_DEPRECATED_SINCE(5, 10) @@ -1394,11 +1346,6 @@ QDateTime QFileInfo::fileTime(QFile::FileTime time) const Q_D(const QFileInfo); auto fetime = QAbstractFileEngine::FileTime(time); - if (d->isDefaultConstructed) - return QDateTime(); - if (d->fileEngine) - return d->getFileTime(fetime).toLocalTime(); - QFileSystemMetaData::MetaDataFlags flag; switch (time) { case QFile::FileAccessTime: @@ -1415,10 +1362,10 @@ QDateTime QFileInfo::fileTime(QFile::FileTime time) const break; } - if (!d->cache_enabled || !d->metaData.hasFlags(flag)) - if (!QFileSystemEngine::fillMetaData(d->fileEntry, d->metaData, flag)) - return QDateTime(); - return d->metaData.fileTime(fetime).toLocalTime(); + return d->checkAttribute<QDateTime>( + flag, + [=]() { return d->metaData.fileTime(fetime).toLocalTime(); }, + [=]() { return d->getFileTime(fetime).toLocalTime(); }); } /*! |