}
void raw_ostream::copy_to_buffer(const char *Ptr, size_t Size) {
+ assert(Size <= size_t(OutBufEnd - OutBufCur) && "Buffer overrun!");
+
// Handle short strings specially, memcpy isn't very good at very short
// strings.
switch (Size) {
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;
}
// 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) {}