diff options
Diffstat (limited to 'lib/Support/raw_ostream.cpp')
-rw-r--r-- | lib/Support/raw_ostream.cpp | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/lib/Support/raw_ostream.cpp b/lib/Support/raw_ostream.cpp index f3a53a5061..a4c293660b 100644 --- a/lib/Support/raw_ostream.cpp +++ b/lib/Support/raw_ostream.cpp @@ -220,17 +220,28 @@ raw_fd_ostream::raw_fd_ostream(const char *Filename, std::string &ErrorInfo) { } raw_fd_ostream::~raw_fd_ostream() { - flush(); - if (ShouldClose) - close(FD); + if (FD >= 0) { + flush(); + if (ShouldClose) + ::close(FD); + } } void raw_fd_ostream::flush_impl() { + assert (FD >= 0 && "File already closed."); if (OutBufCur-OutBufStart) ::write(FD, OutBufStart, OutBufCur-OutBufStart); HandleFlush(); } +void raw_fd_ostream::close() { + assert (ShouldClose); + ShouldClose = false; + flush(); + ::close(FD); + FD = -1; +} + //===----------------------------------------------------------------------===// // raw_stdout/err_ostream //===----------------------------------------------------------------------===// |