summaryrefslogtreecommitdiffstats
path: root/process.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'process.cpp')
-rw-r--r--process.cpp38
1 files changed, 29 insertions, 9 deletions
diff --git a/process.cpp b/process.cpp
index 4c9140d..1320d02 100644
--- a/process.cpp
+++ b/process.cpp
@@ -26,6 +26,8 @@
#include <signal.h>
#include <fcntl.h>
#include <QFileInfo>
+#include <QTcpSocket>
+#include <errno.h>
static int pipefd[2];
@@ -86,6 +88,7 @@ Process::Process()
, mProcess(new QProcess(this))
, mDebuggee(0)
, mDebug(false)
+ , mStdoutFd(1)
{
mProcess->setProcessChannelMode(QProcess::SeparateChannels);
connect(mProcess, &QProcess::readyReadStandardError, this, &Process::readyReadStandardError);
@@ -112,13 +115,29 @@ Process::~Process()
close(pipefd[1]);
}
-void Process::readyReadStandardOutput()
+void Process::forwardProcessOutput(qintptr fd, const QByteArray &data)
{
- QByteArray b = mProcess->readAllStandardOutput();
- write(1, b.constData(), b.size());
+ const char *constData = data.constData();
+ int size = data.size();
+ while (size > 0) {
+ int written = write(fd, constData, size);
+ if (written == -1) {
+ fprintf(stderr, "Cannot forward application output: %d - %s\n", errno, strerror(errno));
+ qApp->quit();
+ break;
+ }
+ size -= written;
+ constData += written;
+ }
if (mConfig.flags.testFlag(Config::PrintDebugMessages))
- qDebug() << b;
+ qDebug() << data;
+}
+
+
+void Process::readyReadStandardOutput()
+{
+ forwardProcessOutput(mStdoutFd, mProcess->readAllStandardOutput());
}
void Process::readyReadStandardError()
@@ -131,10 +150,7 @@ void Process::readyReadStandardError()
}
mDebug = false; // only search once
}
- write(2, b.constData(), b.size());
-
- if (mConfig.flags.testFlag(Config::PrintDebugMessages))
- qDebug() << b;
+ forwardProcessOutput(2, b);
}
void Process::setDebug()
@@ -246,6 +262,11 @@ void Process::setConfig(const Config &config)
mConfig = config;
}
+void Process::setStdoutFd(qintptr stdoutFd)
+{
+ mStdoutFd = stdoutFd;
+}
+
QProcessEnvironment Process::interactiveProcessEnvironment() const
{
QProcessEnvironment env;
@@ -311,4 +332,3 @@ QProcessEnvironment Process::interactiveProcessEnvironment() const
return env;
}
-