| Absolute File Name: | /home/qt/qt5_coco/qt5/qtbase/src/corelib/mimetypes/qmimedatabase.cpp |
| Switch to Source code | Preprocessed file |
| Line | Source | Count | ||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 2 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 3 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 4 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 5 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 6 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 7 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 8 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 9 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 10 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 11 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 12 | namespace { namespace Q_QGS_staticQMimeDatabase { typedef QMimeDatabasePrivate Type; QBasicAtomicInt guard = { QtGlobalStatic::Uninitialized }; __attribute__((visibility("hidden"))) inline Type *innerFunction() { struct HolderBase { ~HolderBase() noexcept { if (guard.load() == QtGlobalStatic::Initialized
executed 25 times by 25 tests: }guard.store(QtGlobalStatic::Destroyed);Executed by:
executed 25 times by 25 tests: }; static struct Holder : public HolderBase { Type value; Holder() noexcept(noexcept(Type ())) : value () { guard.store(QtGlobalStatic::Initialized); } } holder; returnend of blockExecuted by:
executed 5209 times by 24 tests: &holder.value;return &holder.value;Executed by:
executed 5209 times by 24 tests: } } } static QGlobalStatic<QMimeDatabasePrivate, Q_QGS_staticQMimeDatabase::innerFunction, Q_QGS_staticQMimeDatabase::guard> staticQMimeDatabase;return &holder.value;Executed by:
| 0-5209 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 13 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 14 | QMimeDatabasePrivate *QMimeDatabasePrivate::instance() | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 15 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 16 | return executed 2635 times by 23 tests: staticQMimeDatabase();return staticQMimeDatabase();Executed by:
executed 2635 times by 23 tests: return staticQMimeDatabase();Executed by:
| 2635 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 17 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 18 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 19 | QMimeDatabasePrivate::QMimeDatabasePrivate() | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 20 | : m_provider(0), m_defaultMimeType(QLatin1String("application/octet-stream")) | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 21 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 22 | } executed 25 times by 24 tests: end of blockExecuted by:
| 25 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 23 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 24 | QMimeDatabasePrivate::~QMimeDatabasePrivate() | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 25 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 26 | delete m_provider; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 27 | m_provider = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 28 | } executed 25 times by 25 tests: end of blockExecuted by:
| 25 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 29 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 30 | QMimeProviderBase *QMimeDatabasePrivate::provider() | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 31 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 32 | if (!m_provider
| 25-18819 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 33 | QMimeProviderBase *binaryProvider = new QMimeBinaryProvider(this); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 34 | if (binaryProvider->isValid()
| 2-23 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 35 | m_provider = binaryProvider; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 36 | } executed 23 times by 23 tests: else {end of blockExecuted by:
| 23 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 37 | delete binaryProvider; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 38 | m_provider = new QMimeXMLProvider(this); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 39 | } executed 2 times by 2 tests: end of blockExecuted by:
| 2 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 40 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 41 | return executed 18844 times by 24 tests: m_provider;return m_provider;Executed by:
executed 18844 times by 24 tests: return m_provider;Executed by:
| 18844 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 42 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 43 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 44 | void QMimeDatabasePrivate::setProvider(QMimeProviderBase *theProvider) | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 45 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 46 | delete m_provider; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 47 | m_provider = theProvider; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 48 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 49 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 50 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 51 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 52 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 53 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 54 | QMimeType QMimeDatabasePrivate::mimeTypeForName(const QString &nameOrAlias) | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 55 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 56 | return executed 6732 times by 23 tests: provider()->mimeTypeForName(provider()->resolveAlias(nameOrAlias));return provider()->mimeTypeForName(provider()->resolveAlias(nameOrAlias));Executed by:
executed 6732 times by 23 tests: return provider()->mimeTypeForName(provider()->resolveAlias(nameOrAlias));Executed by:
| 6732 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 57 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 58 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 59 | QStringList QMimeDatabasePrivate::mimeTypeForFileName(const QString &fileName, QString *foundSuffix) | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 60 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 61 | if (fileName.endsWith(QLatin1Char('/'))
| 4-2621 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 62 | return executed 4 times by 1 test: QStringList() << QLatin1String("inode/directory");return QStringList() << QLatin1String("inode/directory");Executed by:
executed 4 times by 1 test: return QStringList() << QLatin1String("inode/directory");Executed by:
| 4 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 63 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 64 | QStringList matchingMimeTypes = provider()->findByFileName(QFileInfo(fileName).fileName(), foundSuffix); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 65 | matchingMimeTypes.sort(); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 66 | return executed 2621 times by 22 tests: matchingMimeTypes;return matchingMimeTypes;Executed by:
executed 2621 times by 22 tests: return matchingMimeTypes;Executed by:
| 2621 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 67 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 68 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 69 | static inline bool isTextFile(const QByteArray &data) | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 70 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 71 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 72 | static const char bigEndianBOM[] = "\xFE\xFF"; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 73 | static const char littleEndianBOM[] = "\xFF\xFE"; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 74 | if (data.startsWith(bigEndianBOM)
| 0-18 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 75 | return never executed: true;return true;never executed: return true; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 76 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 77 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 78 | const char *p = data.constData(); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 79 | const char *e = p + qMin(32, data.size()); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 80 | for ( ; p < e
| 12-138 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 81 | if ((
| 0-132 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 82 | return executed 6 times by 1 test: false;return false;Executed by:
executed 6 times by 1 test: return false;Executed by:
| 6 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 83 | } executed 132 times by 1 test: end of blockExecuted by:
| 132 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 84 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 85 | return executed 12 times by 1 test: true;return true;Executed by:
executed 12 times by 1 test: return true;Executed by:
| 12 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 86 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 87 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 88 | QMimeType QMimeDatabasePrivate::findByData(const QByteArray &data, int *accuracyPtr) | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 89 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 90 | if (data.isEmpty()
| 0-64 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 91 | *accuracyPtr = 100; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 92 | return never executed: mimeTypeForName(QLatin1String("application/x-zerosize"));return mimeTypeForName(QLatin1String("application/x-zerosize"));never executed: return mimeTypeForName(QLatin1String("application/x-zerosize")); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 93 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 94 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 95 | *accuracyPtr = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 96 | QMimeType candidate = provider()->findByMagic(data, accuracyPtr); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 97 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 98 | if (candidate.isValid()
| 18-46 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 99 | return executed 46 times by 1 test: candidate;return candidate;Executed by:
executed 46 times by 1 test: return candidate;Executed by:
| 46 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 100 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 101 | if (isTextFile(data)
| 6-12 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 102 | *accuracyPtr = 5; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 103 | return executed 12 times by 1 test: mimeTypeForName(QLatin1String("text/plain"));return mimeTypeForName(QLatin1String("text/plain"));Executed by:
executed 12 times by 1 test: return mimeTypeForName(QLatin1String("text/plain"));Executed by:
| 12 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 104 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 105 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 106 | return executed 6 times by 1 test: mimeTypeForName(defaultMimeType());return mimeTypeForName(defaultMimeType());Executed by:
executed 6 times by 1 test: return mimeTypeForName(defaultMimeType());Executed by:
| 6 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 107 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 108 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 109 | QMimeType QMimeDatabasePrivate::mimeTypeForFileNameAndData(const QString &fileName, QIODevice *device, int *accuracyPtr) | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 110 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 111 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 112 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 113 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 114 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 115 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 116 | *accuracyPtr = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 117 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 118 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 119 | QStringList candidatesByName = mimeTypeForFileName(fileName); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 120 | if (candidatesByName.count() == 1
| 34-2453 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 121 | *accuracyPtr = 100; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 122 | const QMimeType mime = mimeTypeForName(candidatesByName.at(0)); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 123 | if (mime.isValid()
| 0-2453 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 124 | return executed 2453 times by 21 tests: mime;return mime;Executed by:
executed 2453 times by 21 tests: return mime;Executed by:
| 2453 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 125 | candidatesByName.clear(); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 126 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 127 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 128 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 129 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 130 | if (device->isOpen()
| 8-26 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 131 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 132 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 133 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 134 | const QByteArray data = device->peek(16384); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 135 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 136 | int magicAccuracy = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 137 | QMimeType candidateByData(findByData(data, &magicAccuracy)); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 138 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 139 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 140 | if (candidateByData.isValid()
| 0-26 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 141 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 142 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 143 | const QString sniffedMime = candidateByData.name(); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 144 | for (const QString &m : qAsConst(candidatesByName)) { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 145 | if (inherits(m, sniffedMime)
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 146 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 147 | *accuracyPtr = 100; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 148 | return never executed: mimeTypeForName(m);return mimeTypeForName(m);never executed: return mimeTypeForName(m); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 149 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 150 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 151 | *accuracyPtr = magicAccuracy; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 152 | return executed 26 times by 1 test: candidateByData;return candidateByData;Executed by:
executed 26 times by 1 test: return candidateByData;Executed by:
| 26 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 153 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 154 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 155 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 156 | if (candidatesByName.count() > 1
| 0-8 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 157 | *accuracyPtr = 20; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 158 | const QMimeType mime = mimeTypeForName(candidatesByName.at(0)); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 159 | if (mime.isValid()
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 160 | return never executed: mime;return mime;never executed: return mime; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 161 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 162 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 163 | return executed 8 times by 3 tests: mimeTypeForName(defaultMimeType());return mimeTypeForName(defaultMimeType());Executed by:
executed 8 times by 3 tests: return mimeTypeForName(defaultMimeType());Executed by:
| 8 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 164 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 165 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 166 | QList<QMimeType> QMimeDatabasePrivate::allMimeTypes() | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 167 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 168 | return executed 10 times by 1 test: provider()->allMimeTypes();return provider()->allMimeTypes();Executed by:
executed 10 times by 1 test: return provider()->allMimeTypes();Executed by:
| 10 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 169 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 170 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 171 | bool QMimeDatabasePrivate::inherits(const QString &mime, const QString &parent) | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 172 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 173 | const QString resolvedParent = provider()->resolveAlias(parent); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 174 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 175 | std::stack<QString, QStringList> toCheck; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 176 | toCheck.push(mime); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 177 | while (!toCheck.empty()
| 4-116 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 178 | if (toCheck.top() == resolvedParent
| 48-68 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 179 | return executed 48 times by 1 test: true;return true;Executed by:
executed 48 times by 1 test: return true;Executed by:
| 48 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 180 | const auto parents = provider()->parents(toCheck.top()); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 181 | toCheck.pop(); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 182 | for (const QString &par : parents) | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 183 | toCheck.push(par); executed 68 times by 1 test: toCheck.push(par);Executed by:
| 68 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 184 | } executed 68 times by 1 test: end of blockExecuted by:
| 68 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 185 | return executed 4 times by 1 test: false;return false;Executed by:
executed 4 times by 1 test: return false;Executed by:
| 4 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 186 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 187 | QMimeDatabase::QMimeDatabase() : | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 188 | d(staticQMimeDatabase()) | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 189 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 190 | } executed 2574 times by 23 tests: end of blockExecuted by:
| 2574 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 191 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 192 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 193 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 194 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 195 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 196 | QMimeDatabase::~QMimeDatabase() | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 197 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 198 | d = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 199 | } executed 2574 times by 23 tests: end of blockExecuted by:
| 2574 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 200 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 201 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 202 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 203 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 204 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 205 | QMimeType QMimeDatabase::mimeTypeForName(const QString &nameOrAlias) const | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 206 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 207 | QMutexLocker locker(&d->mutex); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 208 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 209 | return executed 4121 times by 2 tests: d->mimeTypeForName(nameOrAlias);return d->mimeTypeForName(nameOrAlias);Executed by:
executed 4121 times by 2 tests: return d->mimeTypeForName(nameOrAlias);Executed by:
| 4121 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 210 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 211 | QMimeType QMimeDatabase::mimeTypeForFile(const QFileInfo &fileInfo, MatchMode mode) const | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 212 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 213 | QMutexLocker locker(&d->mutex); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 214 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 215 | if (fileInfo.isDir()
| 4-2465 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 216 | return executed 4 times by 1 test: d->mimeTypeForName(QLatin1String("inode/directory"));return d->mimeTypeForName(QLatin1String("inode/directory"));Executed by:
executed 4 times by 1 test: return d->mimeTypeForName(QLatin1String("inode/directory"));Executed by:
| 4 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 217 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 218 | QFile file(fileInfo.absoluteFilePath()); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 219 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 220 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 221 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 222 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 223 | const QByteArray nativeFilePath = QFile::encodeName(file.fileName()); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 224 | struct stat64 statBuffer; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 225 | if (::
| 40-2425 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 226 | if (((((
| 0-40 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 227 | return never executed: d->mimeTypeForName(QLatin1String("inode/chardevice"));return d->mimeTypeForName(QLatin1String("inode/chardevice"));never executed: return d->mimeTypeForName(QLatin1String("inode/chardevice")); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 228 | if (((((
| 0-40 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 229 | return never executed: d->mimeTypeForName(QLatin1String("inode/blockdevice"));return d->mimeTypeForName(QLatin1String("inode/blockdevice"));never executed: return d->mimeTypeForName(QLatin1String("inode/blockdevice")); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 230 | if (((((
| 4-36 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 231 | return executed 4 times by 1 test: d->mimeTypeForName(QLatin1String("inode/fifo"));return d->mimeTypeForName(QLatin1String("inode/fifo"));Executed by:
executed 4 times by 1 test: return d->mimeTypeForName(QLatin1String("inode/fifo"));Executed by:
| 4 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 232 | if (((((
| 0-36 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 233 | return never executed: d->mimeTypeForName(QLatin1String("inode/socket"));return d->mimeTypeForName(QLatin1String("inode/socket"));never executed: return d->mimeTypeForName(QLatin1String("inode/socket")); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 234 | } executed 36 times by 3 tests: end of blockExecuted by:
| 36 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 235 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 236 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 237 | int priority = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 238 | switch (mode) { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 239 | case executed 2457 times by 22 tests: MatchDefault:case MatchDefault:Executed by:
executed 2457 times by 22 tests: case MatchDefault:Executed by:
| 2457 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 240 | file.open(QIODevice::ReadOnly); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 241 | return executed 2457 times by 22 tests: d->mimeTypeForFileNameAndData(fileInfo.absoluteFilePath(), &file, &priority);return d->mimeTypeForFileNameAndData(fileInfo.absoluteFilePath(), &file, &priority);Executed by:
executed 2457 times by 22 tests: return d->mimeTypeForFileNameAndData(fileInfo.absoluteFilePath(), &file, &priority);Executed by:
| 2457 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 242 | case never executed: MatchExtension:case MatchExtension:never executed: case MatchExtension: | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 243 | locker.unlock(); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 244 | return never executed: mimeTypeForFile(fileInfo.absoluteFilePath(), mode);return mimeTypeForFile(fileInfo.absoluteFilePath(), mode);never executed: return mimeTypeForFile(fileInfo.absoluteFilePath(), mode); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 245 | case executed 4 times by 1 test: MatchContent:case MatchContent:Executed by:
executed 4 times by 1 test: case MatchContent:Executed by:
| 4 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 246 | if (file.open(QIODevice::ReadOnly)
| 0-4 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 247 | locker.unlock(); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 248 | return executed 4 times by 1 test: mimeTypeForData(&file);return mimeTypeForData(&file);Executed by:
executed 4 times by 1 test: return mimeTypeForData(&file);Executed by:
| 4 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 249 | } else { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 250 | return never executed: d->mimeTypeForName(d->defaultMimeType());return d->mimeTypeForName(d->defaultMimeType());never executed: return d->mimeTypeForName(d->defaultMimeType()); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 251 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 252 | default never executed: :default:never executed: default: | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 253 | ((!(false)) ? qt_assert("false",__FILE__,395) : qt_noop()); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 254 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 255 | return never executed: d->mimeTypeForName(d->defaultMimeType());return d->mimeTypeForName(d->defaultMimeType());never executed: return d->mimeTypeForName(d->defaultMimeType()); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 256 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 257 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 258 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 259 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 260 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 261 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 262 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 263 | QMimeType QMimeDatabase::mimeTypeForFile(const QString &fileName, MatchMode mode) const | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 264 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 265 | if (mode == MatchExtension
| 40-68 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 266 | QMutexLocker locker(&d->mutex); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 267 | const QStringList matches = d->mimeTypeForFileName(fileName); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 268 | const int matchCount = matches.count(); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 269 | if (matchCount == 0
| 16-52 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 270 | return executed 16 times by 1 test: d->mimeTypeForName(d->defaultMimeType());return d->mimeTypeForName(d->defaultMimeType());Executed by:
executed 16 times by 1 test: return d->mimeTypeForName(d->defaultMimeType());Executed by:
| 16 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 271 | } else if (matchCount == 1
| 0-52 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 272 | return executed 52 times by 1 test: d->mimeTypeForName(matches.first());return d->mimeTypeForName(matches.first());Executed by:
executed 52 times by 1 test: return d->mimeTypeForName(matches.first());Executed by:
| 52 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 273 | } else { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 274 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 275 | return never executed: d->mimeTypeForName(matches.first());return d->mimeTypeForName(matches.first());never executed: return d->mimeTypeForName(matches.first()); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 276 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 277 | } else { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 278 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 279 | QFileInfo fileInfo(fileName); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 280 | return executed 40 times by 1 test: mimeTypeForFile(fileInfo, mode);return mimeTypeForFile(fileInfo, mode);Executed by:
executed 40 times by 1 test: return mimeTypeForFile(fileInfo, mode);Executed by:
| 40 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 281 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 282 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 283 | QList<QMimeType> QMimeDatabase::mimeTypesForFileName(const QString &fileName) const | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 284 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 285 | QMutexLocker locker(&d->mutex); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 286 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 287 | const QStringList matches = d->mimeTypeForFileName(fileName); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 288 | QList<QMimeType> mimes; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 289 | mimes.reserve(matches.count()); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 290 | for (const QString &mime : matches) | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 291 | mimes.append(d->mimeTypeForName(mime)); executed 52 times by 1 test: mimes.append(d->mimeTypeForName(mime));Executed by:
| 52 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 292 | return executed 54 times by 1 test: mimes;return mimes;Executed by:
executed 54 times by 1 test: return mimes;Executed by:
| 54 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 293 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 294 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 295 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 296 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 297 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 298 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 299 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 300 | QString QMimeDatabase::suffixForFileName(const QString &fileName) const | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 301 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 302 | QMutexLocker locker(&d->mutex); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 303 | QString foundSuffix; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 304 | d->mimeTypeForFileName(fileName, &foundSuffix); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 305 | return executed 16 times by 1 test: foundSuffix;return foundSuffix;Executed by:
executed 16 times by 1 test: return foundSuffix;Executed by:
| 16 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 306 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 307 | QMimeType QMimeDatabase::mimeTypeForData(const QByteArray &data) const | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 308 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 309 | QMutexLocker locker(&d->mutex); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 310 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 311 | int accuracy = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 312 | return executed 10 times by 1 test: d->findByData(data, &accuracy);return d->findByData(data, &accuracy);Executed by:
executed 10 times by 1 test: return d->findByData(data, &accuracy);Executed by:
| 10 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 313 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 314 | QMimeType QMimeDatabase::mimeTypeForData(QIODevice *device) const | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 315 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 316 | QMutexLocker locker(&d->mutex); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 317 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 318 | int accuracy = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 319 | const bool openedByUs = !device->isOpen()
| 4-18 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 320 | if (device->isOpen()
| 4-28 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 321 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 322 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 323 | const QByteArray data = device->peek(16384); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 324 | const QMimeType result = d->findByData(data, &accuracy); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 325 | if (openedByUs
| 14 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 326 | device->close(); executed 14 times by 1 test: device->close();Executed by:
| 14 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 327 | return executed 28 times by 1 test: result;return result;Executed by:
executed 28 times by 1 test: return result;Executed by:
| 28 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 328 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 329 | return executed 4 times by 1 test: d->mimeTypeForName(d->defaultMimeType());return d->mimeTypeForName(d->defaultMimeType());Executed by:
executed 4 times by 1 test: return d->mimeTypeForName(d->defaultMimeType());Executed by:
| 4 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 330 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 331 | QMimeType QMimeDatabase::mimeTypeForUrl(const QUrl &url) const | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 332 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 333 | if (url.isLocalFile()
| 0-10 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 334 | return never executed: mimeTypeForFile(url.toLocalFile());return mimeTypeForFile(url.toLocalFile());never executed: return mimeTypeForFile(url.toLocalFile()); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 335 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 336 | const QString scheme = url.scheme(); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 337 | if (scheme.startsWith(QLatin1String("http"))
| 2-8 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 338 | return executed 6 times by 1 test: mimeTypeForName(d->defaultMimeType());return mimeTypeForName(d->defaultMimeType());Executed by:
executed 6 times by 1 test: return mimeTypeForName(d->defaultMimeType());Executed by:
| 6 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 339 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 340 | return executed 4 times by 1 test: mimeTypeForFile(url.path());return mimeTypeForFile(url.path());Executed by:
executed 4 times by 1 test: return mimeTypeForFile(url.path());Executed by:
| 4 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 341 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 342 | QMimeType QMimeDatabase::mimeTypeForFileNameAndData(const QString &fileName, QIODevice *device) const | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 343 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 344 | int accuracy = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 345 | const bool openedByUs = !device->isOpen()
| 0-10 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 346 | const QMimeType result = d->mimeTypeForFileNameAndData(fileName, device, &accuracy); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 347 | if (openedByUs
| 10 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 348 | device->close(); executed 10 times by 1 test: device->close();Executed by:
| 10 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 349 | return executed 20 times by 1 test: result;return result;Executed by:
executed 20 times by 1 test: return result;Executed by:
| 20 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 350 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 351 | QMimeType QMimeDatabase::mimeTypeForFileNameAndData(const QString &fileName, const QByteArray &data) const | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 352 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 353 | QBuffer buffer(const_cast<QByteArray *>(&data)); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 354 | buffer.open(QIODevice::ReadOnly); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 355 | int accuracy = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 356 | return executed 10 times by 1 test: d->mimeTypeForFileNameAndData(fileName, &buffer, &accuracy);return d->mimeTypeForFileNameAndData(fileName, &buffer, &accuracy);Executed by:
executed 10 times by 1 test: return d->mimeTypeForFileNameAndData(fileName, &buffer, &accuracy);Executed by:
| 10 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 357 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 358 | QList<QMimeType> QMimeDatabase::allMimeTypes() const | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 359 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 360 | QMutexLocker locker(&d->mutex); | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 361 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| 362 | return executed 10 times by 1 test: d->allMimeTypes();return d->allMimeTypes();Executed by:
executed 10 times by 1 test: return d->allMimeTypes();Executed by:
| 10 | ||||||||||||||||||||||||||||||||||||||||||||||||
| 363 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||
| 364 | - | |||||||||||||||||||||||||||||||||||||||||||||||||
| Switch to Source code | Preprocessed file |