From eda5f0ece361e80869cb819168801d4eaa7fc2f2 Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Thu, 13 Aug 2009 23:18:56 +0000 Subject: When standard output is a terminal, set outs() to be unbuffered, to mimic the behavior of stdtout, which is line-buffered when the output is a terminal. This fixes some issues with bugpoint output appearing being printed out of order. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78953 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Support/raw_ostream.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/Support/raw_ostream.cpp b/lib/Support/raw_ostream.cpp index f0090d8..dcd3367 100644 --- a/lib/Support/raw_ostream.cpp +++ b/lib/Support/raw_ostream.cpp @@ -315,6 +315,10 @@ raw_fd_ostream::raw_fd_ostream(const char *Filename, bool Binary, bool Force, if (Binary) sys::Program::ChangeStdoutToBinary(); ShouldClose = false; + // Mimic stdout by defaulting to unbuffered if the output device + // is a terminal. + if (sys::Process::StandardOutIsDisplayed()) + SetUnbuffered(); return; } @@ -411,7 +415,13 @@ raw_ostream &raw_fd_ostream::resetColor() { // raw_stdout/err_ostream //===----------------------------------------------------------------------===// -raw_stdout_ostream::raw_stdout_ostream():raw_fd_ostream(STDOUT_FILENO, false) {} +// Set buffer settings to model stdout and stderr behavior. +// raw_ostream doesn't support line buffering, so set standard output to be +// unbuffered when the output device is a terminal. Set standard error to +// be unbuffered. +raw_stdout_ostream::raw_stdout_ostream() + : raw_fd_ostream(STDOUT_FILENO, false, + sys::Process::StandardOutIsDisplayed()) {} raw_stderr_ostream::raw_stderr_ostream():raw_fd_ostream(STDERR_FILENO, false, true) {} -- cgit v1.1