diff options
-rw-r--r-- | src/corelib/io/qprocess.cpp | 10 | ||||
-rw-r--r-- | tests/auto/corelib/io/qprocess/tst_qprocess.cpp | 20 |
2 files changed, 30 insertions, 0 deletions
diff --git a/src/corelib/io/qprocess.cpp b/src/corelib/io/qprocess.cpp index dfde5f236d..cdae149678 100644 --- a/src/corelib/io/qprocess.cpp +++ b/src/corelib/io/qprocess.cpp @@ -2206,6 +2206,16 @@ void QProcessPrivate::start(QIODevice::OpenMode mode) mode &= ~QIODevice::ReadOnly; // not open for reading if (mode == 0) mode = QIODevice::Unbuffered; +#ifndef Q_OS_WINCE + if ((mode & QIODevice::ReadOnly) == 0) { + if (stdoutChannel.type == QProcessPrivate::Channel::Normal) + q->setStandardOutputFile(q->nullDevice()); + if (stderrChannel.type == QProcessPrivate::Channel::Normal + && processChannelMode != QProcess::MergedChannels) + q->setStandardErrorFile(q->nullDevice()); + } +#endif + q->QIODevice::open(mode); stdinChannel.closed = false; diff --git a/tests/auto/corelib/io/qprocess/tst_qprocess.cpp b/tests/auto/corelib/io/qprocess/tst_qprocess.cpp index 0ffac21186..e810f48d6c 100644 --- a/tests/auto/corelib/io/qprocess/tst_qprocess.cpp +++ b/tests/auto/corelib/io/qprocess/tst_qprocess.cpp @@ -122,6 +122,7 @@ private slots: void removeFileWhileProcessIsRunning(); void fileWriterProcess(); void switchReadChannels(); + void discardUnwantedOutput(); void setWorkingDirectory(); void setNonExistentWorkingDirectory(); #endif // not Q_OS_WINCE @@ -2228,6 +2229,25 @@ void tst_QProcess::switchReadChannels() } #endif +#ifndef Q_OS_WINCE +// Reading and writing to a process is not supported on Qt/CE +void tst_QProcess::discardUnwantedOutput() +{ + QProcess process; + + process.setProgram("testProcessEcho2/testProcessEcho2"); + process.start(QIODevice::WriteOnly); + process.write("Hello, World"); + process.closeWriteChannel(); + QVERIFY(process.waitForFinished(5000)); + + process.setReadChannel(QProcess::StandardOutput); + QCOMPARE(process.bytesAvailable(), Q_INT64_C(0)); + process.setReadChannel(QProcess::StandardError); + QCOMPARE(process.bytesAvailable(), Q_INT64_C(0)); +} +#endif + //----------------------------------------------------------------------------- #ifndef Q_OS_WINCE // Q_OS_WIN - setWorkingDirectory will chdir before starting the process on unices |