diff --git a/src/libs/utils/consoleprocess.cpp b/src/libs/utils/consoleprocess.cpp index fe8ef8328875f339cebfe9d6f585c884710ecf33..74b0cc0f1e7bae169e606544776a401c4df1ffb8 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 26ec85fff345d8903bf63d55ce56b994213a3898..9dd6283cb1bf4b7110213770ca7fe0566971558c 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 c4c745fc9b37ffa6fa3e6b7c50da55bc3afc19d9..737dc334bd731f245fd79a0f0e596372758dde4f 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 f450e9265f9dd75781ce962049af94cc2378c940..6d8a2f4ec6a8da0b6f722065300e4b6a7567d32d 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;