QNetworkDiskCache: construct a QFile on the stack

The QFile object is only used in its scope:
- `remove(url)` indirectly removes the file from the disk
  cache (by constructing another QFile) then immediately returns
- if the file could be read, all the read data is stored in a QBuffer,
  the QFile isn't needed after that

Amends c254d73be63033497838807119cb9cb47ca6c1fa.

Change-Id: I714dcc619b8f5ed887f111395967d674ec875d6e
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
(cherry picked from commit b9c92154062a1d6c0f62860a9fa775cba6bac9ef)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Ahmad Samir 2025-05-16 16:59:44 +03:00 committed by Qt Cherry-pick Bot
parent b4ac56aa3a
commit 3b4abd717c

View File

@ -6,7 +6,6 @@
#include "qnetworkdiskcache.h"
#include "qnetworkdiskcache_p.h"
#include "QtCore/qscopedpointer.h"
#include <qfile.h>
#include <qdir.h>
@ -359,12 +358,12 @@ QIODevice *QNetworkDiskCache::data(const QUrl &url)
buffer.reset(new QBuffer);
buffer->setData(d->lastItem.data.data());
} else {
QScopedPointer<QFile> file(new QFile(d->cacheFileName(url)));
if (!file->open(QFile::ReadOnly | QIODevice::Unbuffered))
QFile file(d->cacheFileName(url));
if (!file.open(QFile::ReadOnly | QIODevice::Unbuffered))
return nullptr;
if (!d->lastItem.read(file.data(), true)) {
file->close();
if (!d->lastItem.read(&file, true)) {
file.close(); // On Windows the file can't be removed if it's open
remove(url);
return nullptr;
}
@ -374,7 +373,7 @@ QIODevice *QNetworkDiskCache::data(const QUrl &url)
buffer->setData(d->lastItem.data.data());
} else {
buffer.reset(new QBuffer);
buffer->setData(file->readAll());
buffer->setData(file.readAll());
}
}
buffer->open(QBuffer::ReadOnly);