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