Windows: Fix regression in QFSFileEnginePrivate::nativeWrite()
Change 0696566b1e19c8178e00c0d14f185935e17d9e8b caused the block size to be incorrect for data > 32MB. Since bytesToWrite changes within the do...while loop, then the block size can potentially change too each time. So it needs to be recalculated each time rather than just once. Task-number: QTBUG-56616 Change-Id: I9880d0985f2d0242c30e67230be7271eb806db95 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
This commit is contained in:
parent
a9835dfe55
commit
683c9bc4a8
@ -427,11 +427,11 @@ qint64 QFSFileEnginePrivate::nativeWrite(const char *data, qint64 len)
|
||||
|
||||
// Writing on Windows fails with ERROR_NO_SYSTEM_RESOURCES when
|
||||
// the chunks are too large, so we limit the block size to 32MB.
|
||||
const DWORD blockSize = DWORD(qMin(bytesToWrite, qint64(32 * 1024 * 1024)));
|
||||
qint64 totalWritten = 0;
|
||||
do {
|
||||
const DWORD currentBlockSize = DWORD(qMin(bytesToWrite, qint64(32 * 1024 * 1024)));
|
||||
DWORD bytesWritten;
|
||||
if (!WriteFile(fileHandle, data + totalWritten, blockSize, &bytesWritten, NULL)) {
|
||||
if (!WriteFile(fileHandle, data + totalWritten, currentBlockSize, &bytesWritten, NULL)) {
|
||||
if (totalWritten == 0) {
|
||||
// Note: Only return error if the first WriteFile failed.
|
||||
q->setError(QFile::WriteError, qt_error_string());
|
||||
|
Loading…
x
Reference in New Issue
Block a user