QMimeBinaryProvider: manage m_cacheFile with a std::unique_ptr

Change-Id: Ic68772a75c255a3a2880fa49b2456c34e3153493
Reviewed-by: David Faure <david.faure@kdab.com>
bb10
Ahmad Samir 2023-04-11 22:36:56 +02:00
parent 9d9bbf687f
commit 329722a322
2 changed files with 16 additions and 17 deletions

View File

@ -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<CacheFile>(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;
}

View File

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