From 329722a322a80d5ea8d6f9aa993c2fc4995b08a4 Mon Sep 17 00:00:00 2001 From: Ahmad Samir Date: Tue, 11 Apr 2023 22:36:56 +0200 Subject: [PATCH] QMimeBinaryProvider: manage m_cacheFile with a std::unique_ptr Change-Id: Ic68772a75c255a3a2880fa49b2456c34e3153493 Reviewed-by: David Faure --- src/corelib/mimetypes/qmimeprovider.cpp | 31 ++++++++++++------------- src/corelib/mimetypes/qmimeprovider_p.h | 2 +- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/src/corelib/mimetypes/qmimeprovider.cpp b/src/corelib/mimetypes/qmimeprovider.cpp index 1af0ab34d6..322dd36978 100644 --- a/src/corelib/mimetypes/qmimeprovider.cpp +++ b/src/corelib/mimetypes/qmimeprovider.cpp @@ -130,10 +130,7 @@ bool QMimeBinaryProvider::CacheFile::reload() return load(); } -QMimeBinaryProvider::~QMimeBinaryProvider() -{ - delete m_cacheFile; -} +QMimeBinaryProvider::~QMimeBinaryProvider() = default; bool QMimeBinaryProvider::isValid() { @@ -174,7 +171,7 @@ void QMimeBinaryProvider::ensureLoaded() { if (!m_cacheFile) { const QString cacheFileName = m_directory + "/mime.cache"_L1; - m_cacheFile = new CacheFile(cacheFileName); + m_cacheFile = std::make_unique(cacheFileName); m_mimetypeListLoaded = false; m_mimetypeExtra.clear(); } else { @@ -185,10 +182,8 @@ void QMimeBinaryProvider::ensureLoaded() return; // nothing to do } } - if (!m_cacheFile->isValid()) { // verify existence and version - delete m_cacheFile; - m_cacheFile = nullptr; - } + if (!m_cacheFile->isValid()) // verify existence and version + m_cacheFile.reset(); } static QMimeType mimeTypeForNameUnchecked(const QString &name) @@ -219,19 +214,23 @@ void QMimeBinaryProvider::addFileNameMatches(const QString &fileName, QMimeGlobM Q_ASSERT(m_cacheFile); const QString lowerFileName = fileName.toLower(); // 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 if (result.m_matchingMimeTypes.isEmpty()) { const int reverseSuffixTreeOffset = m_cacheFile->getUint32(PosReverseSuffixTreeOffset); const int numRoots = m_cacheFile->getUint32(reverseSuffixTreeOffset); const int firstRootOffset = m_cacheFile->getUint32(reverseSuffixTreeOffset + 4); - matchSuffixTree(result, m_cacheFile, numRoots, firstRootOffset, lowerFileName, lowerFileName.size() - 1, false); + matchSuffixTree(result, m_cacheFile.get(), numRoots, firstRootOffset, lowerFileName, + lowerFileName.size() - 1, false); if (result.m_matchingMimeTypes.isEmpty()) - matchSuffixTree(result, m_cacheFile, numRoots, firstRootOffset, fileName, fileName.size() - 1, true); + matchSuffixTree(result, m_cacheFile.get(), numRoots, firstRootOffset, fileName, + fileName.size() - 1, true); } // Check complex globs (e.g. "callgrind.out[0-9]*" or "README*") 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 QMimeBinaryProvider::isMimeTypeGlobsExcluded(const char *mimeTypeName) @@ -358,7 +357,7 @@ void QMimeBinaryProvider::findByMagic(const QByteArray &data, int *accuracyPtr, const int off = firstMatchOffset + i * 16; const int numMatchlets = m_cacheFile->getUint32(off + 8); 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 char *mimeType = m_cacheFile->getCharStar(mimeTypeOffset); *accuracyPtr = m_cacheFile->getUint32(off); @@ -593,7 +592,7 @@ QLatin1StringView QMimeBinaryProvider::iconForMime(CacheFile *cacheFile, int pos void QMimeBinaryProvider::loadIcon(QMimeTypePrivate &data) { 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()) { data.iconName = icon; } @@ -602,7 +601,7 @@ void QMimeBinaryProvider::loadIcon(QMimeTypePrivate &data) void QMimeBinaryProvider::loadGenericIcon(QMimeTypePrivate &data) { 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()) { data.genericIconName = icon; } diff --git a/src/corelib/mimetypes/qmimeprovider_p.h b/src/corelib/mimetypes/qmimeprovider_p.h index 7f4d9542c1..5de4a635ee 100644 --- a/src/corelib/mimetypes/qmimeprovider_p.h +++ b/src/corelib/mimetypes/qmimeprovider_p.h @@ -119,7 +119,7 @@ private: void loadMimeTypeList(); bool checkCacheChanged(); - CacheFile *m_cacheFile = nullptr; + std::unique_ptr m_cacheFile; QStringList m_cacheFileNames; QSet m_mimetypeNames; bool m_mimetypeListLoaded;