From 2467a88cde48868dd686fca5f9121846959d0a53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20K=C3=BCmmel?= Date: Fri, 16 Jul 2010 09:57:46 +0000 Subject: [PATCH] no output to stdout when redirecting, cleanup git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@34915 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/support/Systemcall.cpp | 24 ++++++++++++++++-------- src/support/SystemcallPrivate.h | 4 ++-- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/support/Systemcall.cpp b/src/support/Systemcall.cpp index ab1ef60299..5fec0b8f03 100644 --- a/src/support/Systemcall.cpp +++ b/src/support/Systemcall.cpp @@ -246,16 +246,24 @@ SystemcallPrivate::SystemcallPrivate(const std::string& of) : out_index_(0), err_index_(0), out_file_(of), - terminal_out_exists_(os::is_terminal(os::STDOUT)), - terminal_err_exists_(os::is_terminal(os::STDERR)), + use_stdout_(false), + use_stderr_(false), process_events_(false) { if (!out_file_.empty()) { + // Don't output to terminal if stdout is redirected + use_stdout_ = false; // Check whether we have to simply throw away the output. if (out_file_ != os::nulldev()) process_->setStandardOutputFile(toqstr(out_file_)); + } else { + // Output to terminal if stdout exists and is not redirected + use_stdout_ = os::is_terminal(os::STDOUT); } + // When there is a stderr use it + use_stderr_ = os::is_terminal(os::STDERR); + connect(process_, SIGNAL(readyReadStandardOutput()), SLOT(stdOut())); connect(process_, SIGNAL(readyReadStandardError()), SLOT(stdErr())); connect(process_, SIGNAL(error(QProcess::ProcessError)), SLOT(processError(QProcess::ProcessError))); @@ -332,14 +340,14 @@ SystemcallPrivate::~SystemcallPrivate() if (out_index_) { out_data_[out_index_] = '\0'; out_index_ = 0; - if (terminal_out_exists_) + if (use_stdout_) cout << out_data_; } cout.flush(); if (err_index_) { err_data_[err_index_] = '\0'; err_index_ = 0; - if (terminal_err_exists_) + if (use_stderr_) cerr << err_data_; } cerr.flush(); @@ -357,12 +365,12 @@ void SystemcallPrivate::flush() QString data = QString::fromLocal8Bit(process_->readAllStandardOutput().data()); ProgressInterface::instance()->appendMessage(data); - if (!terminal_out_exists_ && out_file_.empty()) + if (!use_stdout_ && out_file_.empty()) cout << fromqstr(data); data = QString::fromLocal8Bit(process_->readAllStandardError().data()); ProgressInterface::instance()->appendError(data); - if (!terminal_err_exists_) + if (!use_stderr_) cerr << fromqstr(data); } } @@ -379,7 +387,7 @@ void SystemcallPrivate::stdOut() out_data_[out_index_] = '\0'; out_index_ = 0; ProgressInterface::instance()->appendMessage(QString::fromLocal8Bit(out_data_)); - if (terminal_out_exists_) + if (use_stdout_) cout << out_data_; } } @@ -398,7 +406,7 @@ void SystemcallPrivate::stdErr() err_data_[err_index_] = '\0'; err_index_ = 0; ProgressInterface::instance()->appendError(QString::fromLocal8Bit(err_data_)); - if (terminal_err_exists_) + if (use_stderr_) cerr << err_data_; } } diff --git a/src/support/SystemcallPrivate.h b/src/support/SystemcallPrivate.h index 958fae1e70..c446358647 100644 --- a/src/support/SystemcallPrivate.h +++ b/src/support/SystemcallPrivate.h @@ -84,8 +84,8 @@ private: /// Standard error buffer. char err_data_[max_buffer_size_]; - bool terminal_err_exists_; - bool terminal_out_exists_; + bool use_stderr_; + bool use_stdout_; QString cmd_; bool process_events_;