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_;

Reply via email to