+ if (out_file_[0] == '&') {
+ if (subst(out_file_, " ", "") == "&2"
+ && err_file_[0] != '&') {
+ out_file_ = err_file_;
+ process_->setProcessChannelMode(
+ QProcess::MergedChannels);
+ } else {
+ if (err_file_[0] == '&') {
+ // Leave alone things such as
+ // "1>&2 2>&1". Should not be harmful,
+ // but let's give anyway a warning.
+ LYXERR0("Unsupported stdout/stderr redirect.");
+ err_file_.erase();
+ } else {
+ LYXERR0("Ambiguous stdout redirect: "
+ << out_file_);
+ }
+ out_file_ = os::nulldev();
+ }
+ }
+ // Check whether we have to set the output file.
+ if (out_file_ != os::nulldev()) {
+ process_->setStandardOutputFile(QString::fromLocal8Bit(
+ out_file_.c_str()));
+ }
+ }
+ if (!err_file_.empty()) {
+ if (err_file_[0] == '&') {
+ if (subst(err_file_, " ", "") == "&1"
+ && out_file_[0] != '&') {
+ process_->setProcessChannelMode(
+ QProcess::MergedChannels);
+ } else {
+ LYXERR0("Ambiguous stderr redirect: "
+ << err_file_);
+ }
+ // In MergedChannels mode stderr goes to stdout.
+ err_file_ = os::nulldev();
+ }
+ // Check whether we have to set the error file.
+ if (err_file_ != os::nulldev()) {
+ process_->setStandardErrorFile(QString::fromLocal8Bit(
+ err_file_.c_str()));
+ }