diff options
Diffstat (limited to 'src/corelib/mimetypes')
-rw-r--r-- | src/corelib/mimetypes/qmimedatabase.cpp | 56 | ||||
-rw-r--r-- | src/corelib/mimetypes/qmimedatabase_p.h | 2 | ||||
-rw-r--r-- | src/corelib/mimetypes/qmimeglobpattern.cpp | 18 | ||||
-rw-r--r-- | src/corelib/mimetypes/qmimeprovider.cpp | 16 | ||||
-rw-r--r-- | src/corelib/mimetypes/qmimetype.cpp | 6 |
5 files changed, 50 insertions, 48 deletions
diff --git a/src/corelib/mimetypes/qmimedatabase.cpp b/src/corelib/mimetypes/qmimedatabase.cpp index 6d6b322229..c55904c1d0 100644 --- a/src/corelib/mimetypes/qmimedatabase.cpp +++ b/src/corelib/mimetypes/qmimedatabase.cpp @@ -357,7 +357,7 @@ QMimeType QMimeDatabasePrivate::mimeTypeForFileNameAndData(const QString &fileNa // Pass 1) Try to match on the file name QMimeGlobMatchResult candidatesByName = findByFileName(fileName); - if (candidatesByName.m_allMatchingMimeTypes.count() == 1) { + if (candidatesByName.m_allMatchingMimeTypes.size() == 1) { const QMimeType mime = mimeTypeForName(candidatesByName.m_matchingMimeTypes.at(0)); if (mime.isValid()) return mime; @@ -386,7 +386,7 @@ QMimeType QMimeDatabasePrivate::mimeTypeForFileNameAndData(const QString &fileNa if (candidatesByName.m_matchingMimeTypes.contains(sniffedMime)) { return candidateByData; } - for (const QString &m : qAsConst(candidatesByName.m_allMatchingMimeTypes)) { + for (const QString &m : std::as_const(candidatesByName.m_allMatchingMimeTypes)) { if (inherits(m, sniffedMime)) { // We have magic + pattern pointing to this, so it's a pretty good match return mimeTypeForName(m); @@ -399,7 +399,7 @@ QMimeType QMimeDatabasePrivate::mimeTypeForFileNameAndData(const QString &fileNa } } - if (candidatesByName.m_allMatchingMimeTypes.count() > 1) { + if (candidatesByName.m_allMatchingMimeTypes.size() > 1) { candidatesByName.m_matchingMimeTypes.sort(); // make it deterministic const QMimeType mime = mimeTypeForName(candidatesByName.m_matchingMimeTypes.at(0)); if (mime.isValid()) @@ -444,31 +444,32 @@ QMimeType QMimeDatabasePrivate::mimeTypeForData(QIODevice *device) } QMimeType QMimeDatabasePrivate::mimeTypeForFile(const QString &fileName, - [[maybe_unused]] const QFileInfo *fileInfo, + const QFileInfo &fileInfo, QMimeDatabase::MatchMode mode) { + if (false) { #ifdef Q_OS_UNIX - // Cannot access statBuf.st_mode from the filesystem engine, so we have to stat again. - // In addition we want to follow symlinks. - const QByteArray nativeFilePath = QFile::encodeName(fileName); - QT_STATBUF statBuffer; - if (QT_STAT(nativeFilePath.constData(), &statBuffer) == 0) { - if (S_ISDIR(statBuffer.st_mode)) - return mimeTypeForName(directoryMimeType()); - if (S_ISCHR(statBuffer.st_mode)) - return mimeTypeForName(QStringLiteral("inode/chardevice")); - if (S_ISBLK(statBuffer.st_mode)) - return mimeTypeForName(QStringLiteral("inode/blockdevice")); - if (S_ISFIFO(statBuffer.st_mode)) - return mimeTypeForName(QStringLiteral("inode/fifo")); - if (S_ISSOCK(statBuffer.st_mode)) - return mimeTypeForName(QStringLiteral("inode/socket")); - } -#else - const bool isDirectory = fileInfo ? fileInfo->isDir() : QFileInfo(fileName).isDir(); - if (isDirectory) - return mimeTypeForName(directoryMimeType()); + } else if (fileInfo.isNativePath()) { + // If this is a local file, we'll want to do a stat() ourselves so we can + // detect additional inode types. In addition we want to follow symlinks. + const QByteArray nativeFilePath = QFile::encodeName(fileName); + QT_STATBUF statBuffer; + if (QT_STAT(nativeFilePath.constData(), &statBuffer) == 0) { + if (S_ISDIR(statBuffer.st_mode)) + return mimeTypeForName(directoryMimeType()); + if (S_ISCHR(statBuffer.st_mode)) + return mimeTypeForName(QStringLiteral("inode/chardevice")); + if (S_ISBLK(statBuffer.st_mode)) + return mimeTypeForName(QStringLiteral("inode/blockdevice")); + if (S_ISFIFO(statBuffer.st_mode)) + return mimeTypeForName(QStringLiteral("inode/fifo")); + if (S_ISSOCK(statBuffer.st_mode)) + return mimeTypeForName(QStringLiteral("inode/socket")); + } #endif + } else if (fileInfo.isDir()) { + return mimeTypeForName(directoryMimeType()); + } switch (mode) { case QMimeDatabase::MatchDefault: @@ -615,7 +616,7 @@ QMimeType QMimeDatabase::mimeTypeForFile(const QFileInfo &fileInfo, MatchMode mo { QMutexLocker locker(&d->mutex); - return d->mimeTypeForFile(fileInfo.filePath(), &fileInfo, mode); + return d->mimeTypeForFile(fileInfo.filePath(), fileInfo, mode); } /*! @@ -630,7 +631,8 @@ QMimeType QMimeDatabase::mimeTypeForFile(const QString &fileName, MatchMode mode if (mode == MatchExtension) { return d->mimeTypeForFileExtension(fileName); } else { - return d->mimeTypeForFile(fileName, nullptr, mode); + QFileInfo fileInfo(fileName); + return d->mimeTypeForFile(fileName, fileInfo, mode); } } @@ -652,7 +654,7 @@ QList<QMimeType> QMimeDatabase::mimeTypesForFileName(const QString &fileName) co const QStringList matches = d->mimeTypeForFileName(fileName); QList<QMimeType> mimes; - mimes.reserve(matches.count()); + mimes.reserve(matches.size()); for (const QString &mime : matches) mimes.append(d->mimeTypeForName(mime)); return mimes; diff --git a/src/corelib/mimetypes/qmimedatabase_p.h b/src/corelib/mimetypes/qmimedatabase_p.h index 2dd8ecf984..96981ba3fe 100644 --- a/src/corelib/mimetypes/qmimedatabase_p.h +++ b/src/corelib/mimetypes/qmimedatabase_p.h @@ -60,7 +60,7 @@ public: QMimeType mimeTypeForFileNameAndData(const QString &fileName, QIODevice *device); QMimeType mimeTypeForFileExtension(const QString &fileName); QMimeType mimeTypeForData(QIODevice *device); - QMimeType mimeTypeForFile(const QString &fileName, const QFileInfo *fileInfo, QMimeDatabase::MatchMode mode); + QMimeType mimeTypeForFile(const QString &fileName, const QFileInfo &fileInfo, QMimeDatabase::MatchMode mode); QMimeType findByData(const QByteArray &data, int *priorityPtr); QStringList mimeTypeForFileName(const QString &fileName); QMimeGlobMatchResult findByFileName(const QString &fileName); diff --git a/src/corelib/mimetypes/qmimeglobpattern.cpp b/src/corelib/mimetypes/qmimeglobpattern.cpp index f991d15b6c..381b635b90 100644 --- a/src/corelib/mimetypes/qmimeglobpattern.cpp +++ b/src/corelib/mimetypes/qmimeglobpattern.cpp @@ -34,9 +34,9 @@ void QMimeGlobMatchResult::addMatch(const QString &mimeType, int weight, const Q bool replace = weight > m_weight; if (!replace) { // Compare the length of the match - if (pattern.length() < m_matchingPatternLength) + if (pattern.size() < m_matchingPatternLength) return; // too short, ignore - else if (pattern.length() > m_matchingPatternLength) { + else if (pattern.size() > m_matchingPatternLength) { // longer: clear any previous match (like *.bz2, when pattern is *.tar.bz2) replace = true; } @@ -44,7 +44,7 @@ void QMimeGlobMatchResult::addMatch(const QString &mimeType, int weight, const Q if (replace) { m_matchingMimeTypes.clear(); // remember the new "longer" length - m_matchingPatternLength = pattern.length(); + m_matchingPatternLength = pattern.size(); m_weight = weight; } if (!m_matchingMimeTypes.contains(mimeType)) { @@ -59,7 +59,7 @@ void QMimeGlobMatchResult::addMatch(const QString &mimeType, int weight, const Q QMimeGlobPattern::PatternType QMimeGlobPattern::detectPatternType(const QString &pattern) const { - const int patternLength = pattern.length(); + const int patternLength = pattern.size(); if (!patternLength) return OtherPattern; @@ -108,10 +108,10 @@ bool QMimeGlobPattern::matchFileName(const QString &inputFileName) const const QString fileName = m_caseSensitivity == Qt::CaseInsensitive ? inputFileName.toLower() : inputFileName; - const int patternLength = m_pattern.length(); + const int patternLength = m_pattern.size(); if (!patternLength) return false; - const int fileNameLength = fileName.length(); + const int fileNameLength = fileName.size(); switch (m_patternType) { case SuffixPattern: { @@ -166,7 +166,7 @@ static bool isSimplePattern(const QString &pattern) { // starts with "*.", has no other '*' return pattern.lastIndexOf(u'*') == 0 - && pattern.length() > 1 + && pattern.size() > 1 && pattern.at(1) == u'.' // (other dots are OK, like *.tar.bz2) // and contains no other special character && !pattern.contains(u'?') @@ -229,7 +229,7 @@ void QMimeGlobPatternList::match(QMimeGlobMatchResult &result, const QMimeGlobPattern &glob = *it; if (glob.matchFileName(fileName)) { const QString pattern = glob.pattern(); - const int suffixLen = isSimplePattern(pattern) ? pattern.length() - 2 : 0; + const int suffixLen = isSimplePattern(pattern) ? pattern.size() - 2 : 0; result.addMatch(glob.mimeType(), glob.weight(), pattern, suffixLen); } } @@ -244,7 +244,7 @@ void QMimeAllGlobPatterns::matchingGlobs(const QString &fileName, QMimeGlobMatch // (which is most of them, so this optimization is definitely worth it) const int lastDot = fileName.lastIndexOf(u'.'); if (lastDot != -1) { // if no '.', skip the extension lookup - const int ext_len = fileName.length() - lastDot - 1; + const int ext_len = fileName.size() - lastDot - 1; const QString simpleExtension = fileName.right(ext_len).toLower(); // (toLower because fast patterns are always case-insensitive and saved as lowercase) diff --git a/src/corelib/mimetypes/qmimeprovider.cpp b/src/corelib/mimetypes/qmimeprovider.cpp index cbb1ccd527..ac27d365ac 100644 --- a/src/corelib/mimetypes/qmimeprovider.cpp +++ b/src/corelib/mimetypes/qmimeprovider.cpp @@ -219,9 +219,9 @@ void QMimeBinaryProvider::addFileNameMatches(const QString &fileName, QMimeGlobM const int reverseSuffixTreeOffset = m_cacheFile->getUint32(PosReverseSuffixTreeOffset); const int numRoots = m_cacheFile->getUint32(reverseSuffixTreeOffset); const int firstRootOffset = m_cacheFile->getUint32(reverseSuffixTreeOffset + 4); - matchSuffixTree(result, m_cacheFile, numRoots, firstRootOffset, lowerFileName, lowerFileName.length() - 1, false); + matchSuffixTree(result, m_cacheFile, numRoots, firstRootOffset, lowerFileName, lowerFileName.size() - 1, false); if (result.m_matchingMimeTypes.isEmpty()) - matchSuffixTree(result, m_cacheFile, numRoots, firstRootOffset, fileName, fileName.length() - 1, true); + matchSuffixTree(result, m_cacheFile, numRoots, firstRootOffset, fileName, fileName.size() - 1, true); } // Check complex globs (e.g. "callgrind.out[0-9]*" or "README*") if (result.m_matchingMimeTypes.isEmpty()) @@ -448,11 +448,11 @@ void QMimeBinaryProvider::addAllMimeTypes(QList<QMimeType> &result) { loadMimeTypeList(); if (result.isEmpty()) { - result.reserve(m_mimetypeNames.count()); - for (const QString &name : qAsConst(m_mimetypeNames)) + result.reserve(m_mimetypeNames.size()); + for (const QString &name : std::as_const(m_mimetypeNames)) result.append(mimeTypeForNameUnchecked(name)); } else { - for (const QString &name : qAsConst(m_mimetypeNames)) + for (const QString &name : std::as_const(m_mimetypeNames)) if (std::find_if(result.constBegin(), result.constEnd(), [name](const QMimeType &mime) -> bool { return mime.name() == name; }) == result.constEnd()) result.append(mimeTypeForNameUnchecked(name)); @@ -680,7 +680,7 @@ void QMimeXMLProvider::findByMagic(const QByteArray &data, int *accuracyPtr, QMi { QString candidateName; bool foundOne = false; - for (const QMimeMagicRuleMatcher &matcher : qAsConst(m_magicMatchers)) { + for (const QMimeMagicRuleMatcher &matcher : std::as_const(m_magicMatchers)) { if (matcher.matches(data)) { const int priority = matcher.priority(); if (priority > *accuracyPtr) { @@ -700,7 +700,7 @@ void QMimeXMLProvider::ensureLoaded() const QString packageDir = m_directory + QStringLiteral("/packages"); QDir dir(packageDir); const QStringList files = dir.entryList(QDir::Files | QDir::NoDotAndDotDot); - allFiles.reserve(files.count()); + allFiles.reserve(files.size()); for (const QString &xmlFile : files) allFiles.append(packageDir + u'/' + xmlFile); @@ -716,7 +716,7 @@ void QMimeXMLProvider::ensureLoaded() //qDebug() << "Loading" << m_allFiles; - for (const QString &file : qAsConst(allFiles)) + for (const QString &file : std::as_const(allFiles)) load(file); } diff --git a/src/corelib/mimetypes/qmimetype.cpp b/src/corelib/mimetypes/qmimetype.cpp index c578f3cad0..24780ffe27 100644 --- a/src/corelib/mimetypes/qmimetype.cpp +++ b/src/corelib/mimetypes/qmimetype.cpp @@ -225,7 +225,7 @@ QString QMimeType::comment() const languageList << QLocale().name(); languageList << QLocale().uiLanguages(); languageList << u"default"_s; // use the default locale if possible. - for (const QString &language : qAsConst(languageList)) { + for (const QString &language : std::as_const(languageList)) { const QString lang = language == "C"_L1 ? u"en_US"_s : language; const QString comm = d->localeComments.value(lang); if (!comm.isEmpty()) @@ -410,10 +410,10 @@ QStringList QMimeType::suffixes() const QMimeDatabasePrivate::instance()->loadMimeTypePrivate(const_cast<QMimeTypePrivate&>(*d)); QStringList result; - for (const QString &pattern : qAsConst(d->globPatterns)) { + for (const QString &pattern : std::as_const(d->globPatterns)) { // Not a simple suffix if it looks like: README or *. or *.* or *.JP*G or *.JP? if (pattern.startsWith("*."_L1) && - pattern.length() > 2 && + pattern.size() > 2 && pattern.indexOf(u'*', 2) < 0 && pattern.indexOf(u'?', 2) < 0) { const QString suffix = pattern.mid(2); result.append(suffix); |