forked from qt-creator/qt-creator
Update mime database from Qt
qtbase/1b39e61a775d70ee96287e9f0e418cb5741e6638 QMimeDatabase: fix detection of pattern conflict in different prefixes Change-Id: Ic795a65d98bb59520bd5fb92dc92f1444bbea2db Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
@@ -214,32 +214,25 @@ void MimeBinaryProvider::addFileNameMatches(const QString &fileName, MimeGlobMat
|
|||||||
return;
|
return;
|
||||||
Q_ASSERT(m_cacheFile);
|
Q_ASSERT(m_cacheFile);
|
||||||
const QString lowerFileName = fileName.toLower();
|
const QString lowerFileName = fileName.toLower();
|
||||||
|
int numMatches = 0;
|
||||||
// Check literals (e.g. "Makefile")
|
// Check literals (e.g. "Makefile")
|
||||||
matchGlobList(result, m_cacheFile.get(), m_cacheFile->getUint32(PosLiteralListOffset),
|
numMatches = matchGlobList(result, m_cacheFile.get(),
|
||||||
fileName);
|
m_cacheFile->getUint32(PosLiteralListOffset), fileName);
|
||||||
// Check the very common *.txt cases with the suffix tree
|
// Check the very common *.txt cases with the suffix tree
|
||||||
if (result.m_matchingMimeTypes.isEmpty()) {
|
if (numMatches == 0) {
|
||||||
const int reverseSuffixTreeOffset = m_cacheFile->getUint32(PosReverseSuffixTreeOffset);
|
const int reverseSuffixTreeOffset = m_cacheFile->getUint32(PosReverseSuffixTreeOffset);
|
||||||
const int numRoots = m_cacheFile->getUint32(reverseSuffixTreeOffset);
|
const int numRoots = m_cacheFile->getUint32(reverseSuffixTreeOffset);
|
||||||
const int firstRootOffset = m_cacheFile->getUint32(reverseSuffixTreeOffset + 4);
|
const int firstRootOffset = m_cacheFile->getUint32(reverseSuffixTreeOffset + 4);
|
||||||
matchSuffixTree(result,
|
if (matchSuffixTree(result, m_cacheFile.get(), numRoots, firstRootOffset, lowerFileName,
|
||||||
m_cacheFile.get(),
|
lowerFileName.size() - 1, false)) {
|
||||||
numRoots,
|
++numMatches;
|
||||||
firstRootOffset,
|
} else if (matchSuffixTree(result, m_cacheFile.get(), numRoots, firstRootOffset, fileName,
|
||||||
lowerFileName,
|
fileName.size() - 1, true)) {
|
||||||
lowerFileName.size() - 1,
|
++numMatches;
|
||||||
false);
|
}
|
||||||
if (result.m_matchingMimeTypes.isEmpty())
|
|
||||||
matchSuffixTree(result,
|
|
||||||
m_cacheFile.get(),
|
|
||||||
numRoots,
|
|
||||||
firstRootOffset,
|
|
||||||
fileName,
|
|
||||||
fileName.size() - 1,
|
|
||||||
true);
|
|
||||||
}
|
}
|
||||||
// Check complex globs (e.g. "callgrind.out[0-9]*" or "README*")
|
// Check complex globs (e.g. "callgrind.out[0-9]*" or "README*")
|
||||||
if (result.m_matchingMimeTypes.isEmpty())
|
if (numMatches == 0)
|
||||||
matchGlobList(result, m_cacheFile.get(), m_cacheFile->getUint32(PosGlobListOffset),
|
matchGlobList(result, m_cacheFile.get(), m_cacheFile->getUint32(PosGlobListOffset),
|
||||||
fileName);
|
fileName);
|
||||||
}
|
}
|
||||||
@@ -255,11 +248,10 @@ void MimeBinaryProvider::excludeMimeTypeGlobs(const QStringList &toExclude)
|
|||||||
appendIfNew(m_mimeTypesWithExcludedGlobs, mt);
|
appendIfNew(m_mimeTypesWithExcludedGlobs, mt);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MimeBinaryProvider::matchGlobList(MimeGlobMatchResult &result,
|
int MimeBinaryProvider::matchGlobList(MimeGlobMatchResult &result, CacheFile *cacheFile, int off,
|
||||||
CacheFile *cacheFile,
|
const QString &fileName)
|
||||||
int off,
|
|
||||||
const QString &fileName)
|
|
||||||
{
|
{
|
||||||
|
int numMatches = 0;
|
||||||
const int numGlobs = cacheFile->getUint32(off);
|
const int numGlobs = cacheFile->getUint32(off);
|
||||||
//qDebug() << "Loading" << numGlobs << "globs from" << cacheFile->file.fileName() << "at offset" << cacheFile->globListOffset;
|
//qDebug() << "Loading" << numGlobs << "globs from" << cacheFile->file.fileName() << "at offset" << cacheFile->globListOffset;
|
||||||
for (int i = 0; i < numGlobs; ++i) {
|
for (int i = 0; i < numGlobs; ++i) {
|
||||||
@@ -279,9 +271,12 @@ void MimeBinaryProvider::matchGlobList(MimeGlobMatchResult &result,
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
MimeGlobPattern glob(pattern, QString() /*unused*/, weight, qtCaseSensitive);
|
MimeGlobPattern glob(pattern, QString() /*unused*/, weight, qtCaseSensitive);
|
||||||
if (glob.matchFileName(fileName))
|
if (glob.matchFileName(fileName)) {
|
||||||
result.addMatch(QLatin1StringView(mimeType), weight, pattern);
|
result.addMatch(QLatin1StringView(mimeType), weight, pattern);
|
||||||
|
++numMatches;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return numMatches;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MimeBinaryProvider::matchSuffixTree(MimeGlobMatchResult &result,
|
bool MimeBinaryProvider::matchSuffixTree(MimeGlobMatchResult &result,
|
||||||
|
@@ -128,10 +128,8 @@ public:
|
|||||||
private:
|
private:
|
||||||
struct CacheFile;
|
struct CacheFile;
|
||||||
|
|
||||||
void matchGlobList(MimeGlobMatchResult &result,
|
int matchGlobList(MimeGlobMatchResult &result, CacheFile *cacheFile, int offset,
|
||||||
CacheFile *cacheFile,
|
const QString &fileName);
|
||||||
int offset,
|
|
||||||
const QString &fileName);
|
|
||||||
bool matchSuffixTree(MimeGlobMatchResult &result,
|
bool matchSuffixTree(MimeGlobMatchResult &result,
|
||||||
CacheFile *cacheFile,
|
CacheFile *cacheFile,
|
||||||
int numEntries,
|
int numEntries,
|
||||||
|
Reference in New Issue
Block a user