diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-11-24 14:24:10 +0100 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-11-24 17:03:50 +0000 |
commit | d5bc255aa50a9181a3258b17c07b8da0890cb035 (patch) | |
tree | fa23ebf8519acf8c3fb010fc3312148ef445f6e8 | |
parent | 0a00958b083008dea340ef78b0f235ca49b7d22c (diff) |
shiboken6: Refactor writing out files
Write the buffer directly to the file instead of
reopening the text stream on it (which has unclear encoding
semantics). Add error handling on this occasion.
Change-Id: Ifd478f96a73dbc21e441fed8b8e543f07b6fa00b
Reviewed-by: Christian Tismer <tismer@stackless.com>
-rw-r--r-- | sources/shiboken6/ApiExtractor/fileout.cpp | 6 | ||||
-rw-r--r-- | sources/shiboken6/ApiExtractor/messages.cpp | 9 | ||||
-rw-r--r-- | sources/shiboken6/ApiExtractor/messages.h | 2 |
3 files changed, 15 insertions, 2 deletions
diff --git a/sources/shiboken6/ApiExtractor/fileout.cpp b/sources/shiboken6/ApiExtractor/fileout.cpp index 10b9747ab..16cfe2bb5 100644 --- a/sources/shiboken6/ApiExtractor/fileout.cpp +++ b/sources/shiboken6/ApiExtractor/fileout.cpp @@ -218,8 +218,10 @@ FileOut::State FileOut::done(QString *errorMessage) *errorMessage = msgCannotOpenForWriting(fileWrite); return Failure; } - stream.setDevice(&fileWrite); - stream << tmp; + if (fileWrite.write(tmp) == -1 || !fileWrite.flush()) { + *errorMessage = msgWriteFailed(fileWrite, tmp.size()); + return Failure; + } } if (diff) { std::printf("%sFile: %s%s\n", colorInfo, qPrintable(name), colorReset); diff --git a/sources/shiboken6/ApiExtractor/messages.cpp b/sources/shiboken6/ApiExtractor/messages.cpp index 2e72b95bc..d0fec85b6 100644 --- a/sources/shiboken6/ApiExtractor/messages.cpp +++ b/sources/shiboken6/ApiExtractor/messages.cpp @@ -540,6 +540,15 @@ QString msgCannotOpenForWriting(const QFile &f) .arg(QDir::toNativeSeparators(f.fileName()), f.errorString()); } +QString msgWriteFailed(const QFile &f, qsizetype size) +{ + QString result; + QTextStream(&result) << "Failed to write " << size << "bytes to '" + << QDir::toNativeSeparators(f.fileName()) << "': " + << f.errorString(); + return result; +} + // generator.cpp QString msgCannotUseEnumAsInt(const QString &name) diff --git a/sources/shiboken6/ApiExtractor/messages.h b/sources/shiboken6/ApiExtractor/messages.h index 6610a318a..a17c22f2d 100644 --- a/sources/shiboken6/ApiExtractor/messages.h +++ b/sources/shiboken6/ApiExtractor/messages.h @@ -177,6 +177,8 @@ QString msgCannotOpenForReading(const QFile &f); QString msgCannotOpenForWriting(const QFile &f); +QString msgWriteFailed(const QFile &f, qsizetype size); + QString msgCannotUseEnumAsInt(const QString &name); QString msgConversionTypesDiffer(const QString &varType, const QString &conversionType); |