Enrico Forestieri wrote:
>>> ///
>>> - bool showerr_;
>>> + bool terminalOutExists_;
>> terminal_out_exists_
>
> stdout_exists_
Hope attached patch makes the code more readable.
But why do we ignore the terminal settings in flush() ?
Peter
Index: Systemcall.cpp
===================================================================
--- Systemcall.cpp (Revision 34914)
+++ Systemcall.cpp (Arbeitskopie)
@@ -246,16 +246,24 @@
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 if (os::is_terminal(os::STDOUT)) {
+ // Output to terminal if stdout exists and is not redirected
+ use_stdout_ = true;
}
+ // 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 @@
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 @@
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 @@
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 @@
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_;
}
}
Index: SystemcallPrivate.h
===================================================================
--- SystemcallPrivate.h (Revision 34912)
+++ SystemcallPrivate.h (Arbeitskopie)
@@ -84,8 +84,8 @@
/// 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_;