avoid needless throw/catch/rethrow, stringref'ize some simple stuff.
[oota-llvm.git] / utils / FileUpdate / FileUpdate.cpp
index 8d5d6b1b905ce776f4d7dbd95605e2787e32baa5..1c66c87aee8f845fe8d6cafd30c4e2ef739d9ee5 100644 (file)
@@ -16,7 +16,7 @@
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/MemoryBuffer.h"
 #include "llvm/Support/PrettyStackTrace.h"
-#include "llvm/Support/raw_ostream.h"
+#include "llvm/Support/ToolOutputFile.h"
 #include "llvm/System/Signals.h"
 using namespace llvm;
 
@@ -36,6 +36,11 @@ int main(int argc, char **argv) {
   PrettyStackTraceProgram X(argc, argv);
   cl::ParseCommandLineOptions(argc, argv);
 
+  if (OutputFilename == "-") {
+    errs() << argv[0] << ": error: Can't update standard output\n";
+    return 1;
+  }
+
   // Get the input data.
   std::string ErrorStr;
   MemoryBuffer *In =
@@ -54,7 +59,7 @@ int main(int argc, char **argv) {
       memcmp(In->getBufferStart(), Out->getBufferStart(),
              Out->getBufferSize()) == 0) {
     if (!Quiet)
-      outs() << argv[0] << ": Not updating '" << OutputFilename
+      errs() << argv[0] << ": Not updating '" << OutputFilename
              << "', contents match input.\n";
     return 0;
   }
@@ -63,24 +68,20 @@ int main(int argc, char **argv) {
 
   // Otherwise, overwrite the output.
   if (!Quiet)
-    outs() << argv[0] << ": Updating '" << OutputFilename
+    errs() << argv[0] << ": Updating '" << OutputFilename
            << "', contents changed.\n";
-  raw_fd_ostream OutStream(OutputFilename.c_str(), /*Binary=*/true,
-                           /*Force=*/true, ErrorStr);
+  tool_output_file OutStream(OutputFilename.c_str(), ErrorStr,
+                             raw_fd_ostream::F_Binary);
   if (!ErrorStr.empty()) {
     errs() << argv[0] << ": Unable to write output '"
            << OutputFilename << "': " << ErrorStr << '\n';
     return 1;
   }
 
-  OutStream.write(In->getBufferStart(), In->getBufferSize());
-  OutStream.close();
+  OutStream.os().write(In->getBufferStart(), In->getBufferSize());
 
-  if (OutStream.has_error()) {
-    errs() << argv[0] << ": Could not open output file '"
-           << OutputFilename << "': " << ErrorStr << '\n';
-    return 1;
-  }
+  // Declare success.
+  OutStream.keep();
 
   return 0;
 }