diff options
Diffstat (limited to 'src/corelib/mimetypes/qmimetypeparser.cpp')
-rw-r--r-- | src/corelib/mimetypes/qmimetypeparser.cpp | 39 |
1 files changed, 27 insertions, 12 deletions
diff --git a/src/corelib/mimetypes/qmimetypeparser.cpp b/src/corelib/mimetypes/qmimetypeparser.cpp index 349313a01d..3f1e53b25d 100644 --- a/src/corelib/mimetypes/qmimetypeparser.cpp +++ b/src/corelib/mimetypes/qmimetypeparser.cpp @@ -139,7 +139,7 @@ bool QMimeTypeParserBase::parseNumber(QStringView n, int *target, QString *error return true; } -#ifndef QT_NO_XMLSTREAMREADER +#if QT_CONFIG(xmlstreamreader) struct CreateMagicMatchRuleResult { QString errorMessage; // must be first @@ -160,18 +160,12 @@ static CreateMagicMatchRuleResult createMagicMatchRule(const QXmlStreamAttribute const auto mask = atts.value(QLatin1StringView(matchMaskAttributeC)); return CreateMagicMatchRuleResult(type, value, offsets, mask); } -#endif +#endif // feature xmlstreamreader bool QMimeTypeParserBase::parse(QIODevice *dev, const QString &fileName, QString *errorMessage) { -#ifdef QT_NO_XMLSTREAMREADER - Q_UNUSED(dev); - if (errorMessage) - *errorMessage = QString::fromLatin1("QXmlStreamReader is not available, cannot parse '%1'.").arg(fileName); - return false; -#else - QMimeTypePrivate data; - data.loaded = true; +#if QT_CONFIG(xmlstreamreader) + QMimeTypeXMLData data; int priority = 50; QStack<QMimeMagicRule *> currentRules; // stack for the nesting of rules QList<QMimeMagicRule> rules; // toplevel rules @@ -215,6 +209,7 @@ bool QMimeTypeParserBase::parse(QIODevice *dev, const QString &fileName, QString break; case ParseGlobDeleteAll: data.globPatterns.clear(); + data.hasGlobDeleteAll = true; break; case ParseSubClass: { const QString inheritsFrom = atts.value(QLatin1StringView(mimeTypeAttributeC)).toString(); @@ -277,7 +272,7 @@ bool QMimeTypeParserBase::parse(QIODevice *dev, const QString &fileName, QString { const auto elementName = reader.name(); if (elementName == QLatin1StringView(mimeTypeTagC)) { - if (!process(QMimeType(data), errorMessage)) + if (!process(data, errorMessage)) return false; data.clear(); } else if (elementName == QLatin1StringView(matchTagC)) { @@ -310,7 +305,27 @@ bool QMimeTypeParserBase::parse(QIODevice *dev, const QString &fileName, QString } return true; -#endif //QT_NO_XMLSTREAMREADER +#else + Q_UNUSED(dev); + if (errorMessage) + *errorMessage = "QXmlStreamReader is not available, cannot parse '%1'."_L1.arg(fileName); + return false; +#endif // feature xmlstreamreader +} + +void QMimeTypeXMLData::clear() +{ + hasGlobDeleteAll = false; + name.clear(); + localeComments.clear(); + genericIconName.clear(); + iconName.clear(); + globPatterns.clear(); +} + +void QMimeTypeXMLData::addGlobPattern(const QString &pattern) +{ + globPatterns.append(pattern); } QT_END_NAMESPACE |