From 35743ea1ad1829a66605852b7e0ba6fb7ee3cc56 Mon Sep 17 00:00:00 2001
From: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
Date: Wed, 30 Mar 2011 11:54:57 +0200
Subject: [PATCH] add disk full error handling to consoleprocess

---
 src/libs/utils/consoleprocess.cpp      |  5 +++++
 src/libs/utils/consoleprocess.h        |  1 +
 src/libs/utils/consoleprocess_unix.cpp | 13 ++++++++++---
 src/libs/utils/consoleprocess_win.cpp  | 10 ++++++++++
 4 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/src/libs/utils/consoleprocess.cpp b/src/libs/utils/consoleprocess.cpp
index fe8ef832887..74b0cc0f1e7 100644
--- a/src/libs/utils/consoleprocess.cpp
+++ b/src/libs/utils/consoleprocess.cpp
@@ -65,6 +65,11 @@ QString ConsoleProcess::msgCannotCreateTempFile(const QString &why)
     return tr("Cannot create temporary file: %1").arg(why);
 }
 
+QString ConsoleProcess::msgCannotWriteTempFile()
+{
+    return tr("Cannot write temporary file. Disk full?");
+}
+
 QString ConsoleProcess::msgCannotCreateTempDir(const QString & dir, const QString &why)
 {
     return tr("Cannot create temporary directory '%1': %2").arg(dir, why);
diff --git a/src/libs/utils/consoleprocess.h b/src/libs/utils/consoleprocess.h
index 26ec85fff34..9dd6283cb1b 100644
--- a/src/libs/utils/consoleprocess.h
+++ b/src/libs/utils/consoleprocess.h
@@ -104,6 +104,7 @@ private:
     static QString msgCommChannelFailed(const QString &error);
     static QString msgPromptToClose();
     static QString msgCannotCreateTempFile(const QString &why);
+    static QString msgCannotWriteTempFile();
     static QString msgCannotCreateTempDir(const QString & dir, const QString &why);
     static QString msgUnexpectedOutput(const QByteArray &what);
     static QString msgCannotChangeToWorkDir(const QString & dir, const QString &why);
diff --git a/src/libs/utils/consoleprocess_unix.cpp b/src/libs/utils/consoleprocess_unix.cpp
index c4c745fc9b3..737dc334bd7 100644
--- a/src/libs/utils/consoleprocess_unix.cpp
+++ b/src/libs/utils/consoleprocess_unix.cpp
@@ -173,11 +173,18 @@ bool ConsoleProcess::start(const QString &program, const QString &args)
             d->m_tempFile = 0;
             return false;
         }
+        QByteArray contents;
         foreach (const QString &var, env) {
-            d->m_tempFile->write(var.toLocal8Bit());
-            d->m_tempFile->write("", 1);
+            QByteArray l8b = var.toLocal8Bit();
+            contents.append(l8b.constData(), l8b.size() + 1);
+        }
+        if (d->m_tempFile->write(contents) != contents.size() || !d->m_tempFile->flush()) {
+            stubServerShutdown();
+            emit processMessage(msgCannotWriteTempFile(), true);
+            delete d->m_tempFile;
+            d->m_tempFile = 0;
+            return false;
         }
-        d->m_tempFile->flush();
     }
 
     xtermArgs
diff --git a/src/libs/utils/consoleprocess_win.cpp b/src/libs/utils/consoleprocess_win.cpp
index f450e9265f9..6d8a2f4ec6a 100644
--- a/src/libs/utils/consoleprocess_win.cpp
+++ b/src/libs/utils/consoleprocess_win.cpp
@@ -157,6 +157,16 @@ bool ConsoleProcess::start(const QString &program, const QString &args)
         foreach (const QString &var, fixWinEnvironment(env))
             out << var << QChar(0);
         out << QChar(0);
+#if QT_VERSION >= QT_VERSION_CHECK(4, 8, 0)
+        out.flush();
+        if (out.status() != QTextStream::Ok) {
+            stubServerShutdown();
+            emit processMessage(msgCannotWriteTempFile(), true);
+            delete d->m_tempFile;
+            d->m_tempFile = 0;
+            return false;
+        }
+#endif
     }
 
     STARTUPINFO si;
-- 
GitLab