Added raw_fd_ostream::close().
[oota-llvm.git] / lib / Support / raw_ostream.cpp
index f3a53a5061751c1df353ed5d2371e367703ae0ca..a4c293660b0b37889357e194e05d6456451ddd30 100644 (file)
@@ -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
 //===----------------------------------------------------------------------===//