diff options
Diffstat (limited to 'src/corelib/mimetypes')
-rw-r--r-- | src/corelib/mimetypes/qmimedatabase.cpp | 4 | ||||
-rw-r--r-- | src/corelib/mimetypes/qmimedatabase_p.h | 1 | ||||
-rw-r--r-- | src/corelib/mimetypes/qmimeprovider.cpp | 18 | ||||
-rw-r--r-- | src/corelib/mimetypes/qmimetype.cpp | 13 | ||||
-rw-r--r-- | src/corelib/mimetypes/qmimetype.h | 13 |
5 files changed, 30 insertions, 19 deletions
diff --git a/src/corelib/mimetypes/qmimedatabase.cpp b/src/corelib/mimetypes/qmimedatabase.cpp index 1ef890c46a..fd11dbc787 100644 --- a/src/corelib/mimetypes/qmimedatabase.cpp +++ b/src/corelib/mimetypes/qmimedatabase.cpp @@ -354,9 +354,10 @@ QMimeType QMimeDatabase::mimeTypeForFile(const QFileInfo &fileInfo, MatchMode mo #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(file.fileName()); QT_STATBUF statBuffer; - if (QT_LSTAT(nativeFilePath.constData(), &statBuffer) == 0) { + if (QT_STAT(nativeFilePath.constData(), &statBuffer) == 0) { if (S_ISCHR(statBuffer.st_mode)) return d->mimeTypeForName(QLatin1String("inode/chardevice")); if (S_ISBLK(statBuffer.st_mode)) @@ -435,6 +436,7 @@ QList<QMimeType> QMimeDatabase::mimeTypesForFileName(const QString &fileName) co QStringList matches = d->mimeTypeForFileName(fileName); QList<QMimeType> mimes; matches.sort(); // Make it deterministic + mimes.reserve(matches.count()); foreach (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 aa86f607c6..1ac7264a9e 100644 --- a/src/corelib/mimetypes/qmimedatabase_p.h +++ b/src/corelib/mimetypes/qmimedatabase_p.h @@ -53,7 +53,6 @@ #include "qmimetype_p.h" #include "qmimeglobpattern_p.h" -#include <QtCore/qhash.h> #include <QtCore/qmutex.h> QT_BEGIN_NAMESPACE diff --git a/src/corelib/mimetypes/qmimeprovider.cpp b/src/corelib/mimetypes/qmimeprovider.cpp index d26bfd0848..917c29b8d6 100644 --- a/src/corelib/mimetypes/qmimeprovider.cpp +++ b/src/corelib/mimetypes/qmimeprovider.cpp @@ -541,6 +541,7 @@ QList<QMimeType> QMimeBinaryProvider::allMimeTypes() { QList<QMimeType> result; loadMimeTypeList(); + result.reserve(m_mimetypeNames.count()); for (QSet<QString>::const_iterator it = m_mimetypeNames.constBegin(); it != m_mimetypeNames.constEnd(); ++it) @@ -567,9 +568,9 @@ void QMimeBinaryProvider::loadMimeTypePrivate(QMimeTypePrivate &data) mimeFiles = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QString::fromLatin1("mime/") + file); // pre-1.3 } if (mimeFiles.isEmpty()) { - qWarning() << "No file found for" << file << ", even though update-mime-info said it would exist."; - qWarning() << "Either it was just removed, or the directory doesn't have executable permission..."; - qWarning() << QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QLatin1String("mime"), QStandardPaths::LocateDirectory); + qWarning() << "No file found for" << file << ", even though update-mime-info said it would exist.\n" + "Either it was just removed, or the directory doesn't have executable permission..." + << QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QLatin1String("mime"), QStandardPaths::LocateDirectory); return; } @@ -577,11 +578,8 @@ void QMimeBinaryProvider::loadMimeTypePrivate(QMimeTypePrivate &data) QString mainPattern; const QString preferredLanguage = QLocale::system().name(); - QListIterator<QString> mimeFilesIter(mimeFiles); - mimeFilesIter.toBack(); - while (mimeFilesIter.hasPrevious()) { // global first, then local. - const QString fullPath = mimeFilesIter.previous(); - QFile qfile(fullPath); + for (QStringList::const_reverse_iterator it = mimeFiles.crbegin(), end = mimeFiles.crend(); it != end; ++it) { // global first, then local. + QFile qfile(*it); if (!qfile.open(QFile::ReadOnly)) continue; @@ -590,7 +588,7 @@ void QMimeBinaryProvider::loadMimeTypePrivate(QMimeTypePrivate &data) if (xml.name() != QLatin1String("mime-type")) { continue; } - const QString name = xml.attributes().value(QLatin1String("type")).toString(); + const QStringRef name = xml.attributes().value(QLatin1String("type")); if (name.isEmpty()) continue; if (name != data.name) { @@ -758,7 +756,7 @@ void QMimeXMLProvider::ensureLoaded() foreach (const QString &packageDir, packageDirs) { QDir dir(packageDir); const QStringList files = dir.entryList(QDir::Files | QDir::NoDotAndDotDot); - //qDebug() << static_cast<const void *>(this) << Q_FUNC_INFO << packageDir << files; + //qDebug() << static_cast<const void *>(this) << packageDir << files; if (!fdoXmlFound) fdoXmlFound = files.contains(QLatin1String("freedesktop.org.xml")); QStringList::const_iterator endIt(files.constEnd()); diff --git a/src/corelib/mimetypes/qmimetype.cpp b/src/corelib/mimetypes/qmimetype.cpp index 5398f9358e..e3b01bbb89 100644 --- a/src/corelib/mimetypes/qmimetype.cpp +++ b/src/corelib/mimetypes/qmimetype.cpp @@ -44,6 +44,7 @@ #include <QtCore/QDebug> #include <QtCore/QLocale> +#include <QtCore/QHashFunctions> #include <memory> @@ -182,6 +183,18 @@ bool QMimeType::operator==(const QMimeType &other) const } /*! + \since 5.6 + \relates QMimeType + + Returns the hash value for \a key, using + \a seed to seed the calculation. + */ +uint qHash(const QMimeType &key, uint seed) Q_DECL_NOTHROW +{ + return qHash(key.d->name, seed); +} + +/*! \fn bool QMimeType::operator!=(const QMimeType &other) const; Returns \c true if \a other does not equal this QMimeType object, otherwise returns \c false. */ diff --git a/src/corelib/mimetypes/qmimetype.h b/src/corelib/mimetypes/qmimetype.h index 13184905b8..6a00541ebc 100644 --- a/src/corelib/mimetypes/qmimetype.h +++ b/src/corelib/mimetypes/qmimetype.h @@ -45,8 +45,10 @@ QT_BEGIN_NAMESPACE class QMimeTypePrivate; -class QFileinfo; class QStringList; +class QMimeType; + +Q_CORE_EXPORT uint qHash(const QMimeType &key, uint seed = 0) Q_DECL_NOTHROW; class Q_CORE_EXPORT QMimeType { @@ -55,13 +57,9 @@ public: QMimeType(const QMimeType &other); QMimeType &operator=(const QMimeType &other); #ifdef Q_COMPILER_RVALUE_REFS - QMimeType &operator=(QMimeType &&other) - { - qSwap(d, other.d); - return *this; - } + QMimeType &operator=(QMimeType &&other) Q_DECL_NOTHROW { swap(other); return *this; } #endif - void swap(QMimeType &other) + void swap(QMimeType &other) Q_DECL_NOTHROW { qSwap(d, other.d); } @@ -101,6 +99,7 @@ protected: friend class QMimeXMLProvider; friend class QMimeBinaryProvider; friend class QMimeTypePrivate; + friend Q_CORE_EXPORT uint qHash(const QMimeType &key, uint seed) Q_DECL_NOTHROW; QExplicitlySharedDataPointer<QMimeTypePrivate> d; }; |