diff --git a/code/ryzom/tools/client/ryzom_installer/src/filesextractor.cpp b/code/ryzom/tools/client/ryzom_installer/src/filesextractor.cpp index 7139df77d..e038d93bc 100644 --- a/code/ryzom/tools/client/ryzom_installer/src/filesextractor.cpp +++ b/code/ryzom/tools/client/ryzom_installer/src/filesextractor.cpp @@ -434,19 +434,29 @@ bool CFilesExtractor::extract7z() if (!outFile.open(QFile::WriteOnly)) { - error = QApplication::tr("Unable to open output file"); + error = QApplication::tr("Unable to open output file %1").arg(destPath); res = SZ_ERROR_FAIL; break; } - size_t processedSize = outFile.write((const char*)(outBuffer + offset), outSizeProcessed); - - if (processedSize != outSizeProcessed) + qint64 currentSizeToProcess = outSizeProcessed; + + do { - error = QApplication::tr("Unable to write output file"); - res = SZ_ERROR_FAIL; - break; + qint64 currentProcessedSize = outFile.write((const char*)(outBuffer + offset), currentSizeToProcess); + + // errors only occur when returned size is -1 + if (currentProcessedSize < 0) + { + error = QApplication::tr("Unable to write output file %1").arg(destPath); + res = SZ_ERROR_FAIL; + break; + } + + offset += currentProcessedSize; + currentSizeToProcess -= currentProcessedSize; } + while (currentSizeToProcess > 0); outFile.close();