aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Support
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2010-08-18 22:26:19 +0000
committerDan Gohman <gohman@apple.com>2010-08-18 22:26:19 +0000
commit2499990699899e6da865c919fe63ef6e6c6f4a00 (patch)
tree39b56f319e6178a362ba47c5559e97b7f55ad051 /lib/Support
parent4bb464178447ce1d58f20e0644f35b690e3215bd (diff)
downloadexternal_llvm-2499990699899e6da865c919fe63ef6e6c6f4a00.zip
external_llvm-2499990699899e6da865c919fe63ef6e6c6f4a00.tar.gz
external_llvm-2499990699899e6da865c919fe63ef6e6c6f4a00.tar.bz2
Make raw_fd_ostream consider itself the owner of STDOUT_FILENO when
constructed with an output filename of "-". In particular, allow the file descriptor to be closed, and close the file descriptor in the destructor if it hasn't been explicitly closed already, to ensure that any write errors are detected. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111436 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Support')
-rw-r--r--lib/Support/raw_ostream.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/lib/Support/raw_ostream.cpp b/lib/Support/raw_ostream.cpp
index ac118a9..71a2ac5 100644
--- a/lib/Support/raw_ostream.cpp
+++ b/lib/Support/raw_ostream.cpp
@@ -377,14 +377,17 @@ raw_fd_ostream::raw_fd_ostream(const char *Filename, std::string &ErrorInfo,
ErrorInfo.clear();
- // Handle "-" as stdout.
+ // Handle "-" as stdout. Note that when we do this, we consider ourself
+ // the owner of stdout. This means that we can do things like close the
+ // file descriptor when we're done and set the "binary" flag globally.
if (Filename[0] == '-' && Filename[1] == 0) {
FD = STDOUT_FILENO;
// If user requested binary then put stdout into binary mode if
// possible.
if (Flags & F_Binary)
sys::Program::ChangeStdoutToBinary();
- ShouldClose = false;
+ // Close stdout when we're done, to detect any output errors.
+ ShouldClose = true;
return;
}