Detect write failures on raw_fd_ostream.
authorDaniel Dunbar <daniel@zuster.org>
Wed, 15 Jul 2009 08:11:46 +0000 (08:11 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Wed, 15 Jul 2009 08:11:46 +0000 (08:11 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75758 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Support/raw_ostream.cpp

index 23a756e4df229478f3f88b6fb05d09d1721b2a60..ef725018ee23a73ce56e5447c0ada191e2cbeb47 100644 (file)
@@ -18,6 +18,7 @@
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/Config/config.h"
 #include "llvm/Support/Compiler.h"
+#include "llvm/Support/ErrorHandling.h"
 #include <ostream>
 
 #if defined(HAVE_UNISTD_H)
@@ -285,7 +286,8 @@ raw_fd_ostream::~raw_fd_ostream() {
 void raw_fd_ostream::write_impl(const char *Ptr, unsigned Size) {
   assert (FD >= 0 && "File already closed.");
   pos += Size;
-  ::write(FD, Ptr, Size);
+  if (::write(FD, Ptr, Size) != (ssize_t) Size)
+    llvm_report_error("IO failure writing to output stream.");
 }
 
 void raw_fd_ostream::close() {
@@ -298,7 +300,7 @@ void raw_fd_ostream::close() {
 
 uint64_t raw_fd_ostream::seek(uint64_t off) {
   flush();
-  pos = lseek(FD, off, SEEK_SET);
+  pos = ::lseek(FD, off, SEEK_SET);
   return pos;  
 }