aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2020-11-24 14:24:10 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2020-11-24 17:03:50 +0000
commitd5bc255aa50a9181a3258b17c07b8da0890cb035 (patch)
treefa23ebf8519acf8c3fb010fc3312148ef445f6e8
parent0a00958b083008dea340ef78b0f235ca49b7d22c (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.cpp6
-rw-r--r--sources/shiboken6/ApiExtractor/messages.cpp9
-rw-r--r--sources/shiboken6/ApiExtractor/messages.h2
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);