+SystemcallPrivate::SystemcallPrivate(const std::string& of) :
+ proc_(new QProcess), outindex_(0), errindex_(0),
+ outfile(of), showout_(false), showerr_(false), process_events(false)
+{
+ if (!outfile.empty()) {
+ // Check whether we have to simply throw away the output.
+ if (outfile != os::nulldev())
+ proc_->setStandardOutputFile(toqstr(outfile));
+ } else if (os::is_terminal(os::STDOUT))
+ showout();
+ if (os::is_terminal(os::STDERR))
+ showerr();
+
+ connect(proc_, SIGNAL(readyReadStandardOutput()), SLOT(stdOut()));
+ connect(proc_, SIGNAL(readyReadStandardError()), SLOT(stdErr()));
+ connect(proc_, SIGNAL(error(QProcess::ProcessError)), SLOT(processError(QProcess::ProcessError)));
+ connect(proc_, SIGNAL(started()), this, SLOT(processStarted()));
+ connect(proc_, SIGNAL(finished(int, QProcess::ExitStatus)), SLOT(processFinished(int, QProcess::ExitStatus)));
+}
+
+
+
+void SystemcallPrivate::startProcess(const QString& cmd)
+{
+ if (proc_) {
+ state = SystemcallPrivate::Starting;
+ proc_->start(cmd);
+ }
+}
+
+
+void SystemcallPrivate::processEvents()
+{
+ if(process_events) {
+ //static int count = 0; qDebug() << count++ << ": waitAndProcessEvents";
+ QCoreApplication::processEvents(QEventLoop::AllEvents);
+ }
+}
+
+
+void SystemcallPrivate::waitAndProcessEvents()