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.

Pick-to: 6.9
Change-Id: I714dcc619b8f5ed887f111395967d674ec875d6e
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
This commit is contained in:
Ahmad Samir 2025-05-16 16:59:44 +03:00 committed by Marc Mutz
parent 66803a863e
commit b9c9215406

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);