Update mime database from Qt

qtbase/329722a322a80d5ea8d6f9aa993c2fc4995b08a4
  QMimeBinaryProvider: manage m_cacheFile with a std::unique_ptr

Change-Id: I3a2fb727017cace5c8f4c3edd797c538d27f96b3
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
Eike Ziller
2024-08-27 15:06:21 +02:00
parent 079db72ebb
commit 63df2d32bb
2 changed files with 14 additions and 17 deletions

View File

@@ -130,10 +130,7 @@ bool MimeBinaryProvider::CacheFile::reload()
return load(); return load();
} }
MimeBinaryProvider::~MimeBinaryProvider() MimeBinaryProvider::~MimeBinaryProvider() = default;
{
delete m_cacheFile;
}
bool MimeBinaryProvider::isValid() bool MimeBinaryProvider::isValid()
{ {
@@ -174,7 +171,7 @@ void MimeBinaryProvider::ensureLoaded()
{ {
if (!m_cacheFile) { if (!m_cacheFile) {
const QString cacheFileName = m_directory + "/mime.cache"_L1; const QString cacheFileName = m_directory + "/mime.cache"_L1;
m_cacheFile = new CacheFile(cacheFileName); m_cacheFile = std::make_unique<CacheFile>(cacheFileName);
m_mimetypeListLoaded = false; m_mimetypeListLoaded = false;
m_mimetypeExtra.clear(); m_mimetypeExtra.clear();
} else { } else {
@@ -185,10 +182,8 @@ void MimeBinaryProvider::ensureLoaded()
return; // nothing to do return; // nothing to do
} }
} }
if (!m_cacheFile->isValid()) { // verify existence and version if (!m_cacheFile->isValid()) // verify existence and version
delete m_cacheFile; m_cacheFile.reset();
m_cacheFile = nullptr;
}
} }
static MimeType mimeTypeForNameUnchecked(const QString &name) static MimeType mimeTypeForNameUnchecked(const QString &name)
@@ -220,14 +215,15 @@ void MimeBinaryProvider::addFileNameMatches(const QString &fileName, MimeGlobMat
Q_ASSERT(m_cacheFile); Q_ASSERT(m_cacheFile);
const QString lowerFileName = fileName.toLower(); const QString lowerFileName = fileName.toLower();
// Check literals (e.g. "Makefile") // Check literals (e.g. "Makefile")
matchGlobList(result, m_cacheFile, m_cacheFile->getUint32(PosLiteralListOffset), fileName); matchGlobList(result, m_cacheFile.get(), 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 (result.m_matchingMimeTypes.isEmpty()) {
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, matchSuffixTree(result,
m_cacheFile, m_cacheFile.get(),
numRoots, numRoots,
firstRootOffset, firstRootOffset,
lowerFileName, lowerFileName,
@@ -235,7 +231,7 @@ void MimeBinaryProvider::addFileNameMatches(const QString &fileName, MimeGlobMat
false); false);
if (result.m_matchingMimeTypes.isEmpty()) if (result.m_matchingMimeTypes.isEmpty())
matchSuffixTree(result, matchSuffixTree(result,
m_cacheFile, m_cacheFile.get(),
numRoots, numRoots,
firstRootOffset, firstRootOffset,
fileName, fileName,
@@ -244,7 +240,8 @@ void MimeBinaryProvider::addFileNameMatches(const QString &fileName, MimeGlobMat
} }
// 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 (result.m_matchingMimeTypes.isEmpty())
matchGlobList(result, m_cacheFile, m_cacheFile->getUint32(PosGlobListOffset), fileName); matchGlobList(result, m_cacheFile.get(), m_cacheFile->getUint32(PosGlobListOffset),
fileName);
} }
bool MimeBinaryProvider::isMimeTypeGlobsExcluded(const char *mimeTypeName) bool MimeBinaryProvider::isMimeTypeGlobsExcluded(const char *mimeTypeName)
@@ -387,7 +384,7 @@ void MimeBinaryProvider::findByMagic(const QByteArray &data, int *accuracyPtr, M
const int off = firstMatchOffset + i * 16; const int off = firstMatchOffset + i * 16;
const int numMatchlets = m_cacheFile->getUint32(off + 8); const int numMatchlets = m_cacheFile->getUint32(off + 8);
const int firstMatchletOffset = m_cacheFile->getUint32(off + 12); const int firstMatchletOffset = m_cacheFile->getUint32(off + 12);
if (matchMagicRule(m_cacheFile, numMatchlets, firstMatchletOffset, data)) { if (matchMagicRule(m_cacheFile.get(), numMatchlets, firstMatchletOffset, data)) {
const int mimeTypeOffset = m_cacheFile->getUint32(off + 4); const int mimeTypeOffset = m_cacheFile->getUint32(off + 4);
const char *mimeType = m_cacheFile->getCharStar(mimeTypeOffset); const char *mimeType = m_cacheFile->getCharStar(mimeTypeOffset);
if (m_overriddenMimeTypes.contains(QLatin1String(mimeType))) if (m_overriddenMimeTypes.contains(QLatin1String(mimeType)))
@@ -621,7 +618,7 @@ QLatin1StringView MimeBinaryProvider::iconForMime(CacheFile *cacheFile, int posL
void MimeBinaryProvider::loadIcon(MimeTypePrivate &data) void MimeBinaryProvider::loadIcon(MimeTypePrivate &data)
{ {
const QByteArray inputMime = data.name.toLatin1(); const QByteArray inputMime = data.name.toLatin1();
const QLatin1StringView icon = iconForMime(m_cacheFile, PosIconsListOffset, inputMime); const QLatin1StringView icon = iconForMime(m_cacheFile.get(), PosIconsListOffset, inputMime);
if (!icon.isEmpty()) { if (!icon.isEmpty()) {
data.iconName = icon; data.iconName = icon;
} }
@@ -630,7 +627,7 @@ void MimeBinaryProvider::loadIcon(MimeTypePrivate &data)
void MimeBinaryProvider::loadGenericIcon(MimeTypePrivate &data) void MimeBinaryProvider::loadGenericIcon(MimeTypePrivate &data)
{ {
const QByteArray inputMime = data.name.toLatin1(); const QByteArray inputMime = data.name.toLatin1();
const QLatin1StringView icon = iconForMime(m_cacheFile, PosGenericIconsListOffset, inputMime); const QLatin1StringView icon = iconForMime(m_cacheFile.get(), PosGenericIconsListOffset, inputMime);
if (!icon.isEmpty()) { if (!icon.isEmpty()) {
data.genericIconName = icon; data.genericIconName = icon;
} }

View File

@@ -145,7 +145,7 @@ private:
void loadMimeTypeList(); void loadMimeTypeList();
bool checkCacheChanged(); bool checkCacheChanged();
CacheFile *m_cacheFile = nullptr; std::unique_ptr<CacheFile> m_cacheFile;
QStringList m_cacheFileNames; QStringList m_cacheFileNames;
QSet<QString> m_mimetypeNames; QSet<QString> m_mimetypeNames;
bool m_mimetypeListLoaded; bool m_mimetypeListLoaded;