diff --git a/include/llvm/Support/GraphWriter.h b/include/llvm/Support/GraphWriter.h index 7573ef0dc9e..65572b1c82c 100644 --- a/include/llvm/Support/GraphWriter.h +++ b/include/llvm/Support/GraphWriter.h @@ -24,6 +24,7 @@ #define LLVM_SUPPORT_GRAPHWRITER_H #include "llvm/Support/DOTGraphTraits.h" +#include "llvm/Support/FileSystem.h" #include "llvm/Support/raw_ostream.h" #include "llvm/ADT/GraphTraits.h" #include "llvm/Support/Path.h" @@ -309,32 +310,21 @@ raw_ostream &WriteGraph(raw_ostream &O, const GraphType &G, template sys::Path WriteGraph(const GraphType &G, const std::string &Name, bool ShortNames = false, const std::string &Title = "") { - std::string ErrMsg; - sys::Path Filename = sys::Path::GetTemporaryDirectory(&ErrMsg); - if (Filename.isEmpty()) { - errs() << "Error: " << ErrMsg << "\n"; - return Filename; - } - Filename.appendComponent(Name + ".dot"); - if (Filename.makeUnique(true,&ErrMsg)) { - errs() << "Error: " << ErrMsg << "\n"; + SmallString<128> FilePath; + + int FileFD; + if (error_code ec = sys::fs::unique_file("graph-" + Name + "-%%-%%-%%-%%.dot", + FileFD, FilePath)) { + errs() << "Error creating output file: " << ec.message() << '\n'; return sys::Path(); } - errs() << "Writing '" << Filename.str() << "'... "; + errs() << "Writing '" << FilePath << "'... "; + raw_fd_ostream O(FileFD, true); + llvm::WriteGraph(O, G, ShortNames, Title); + errs() << " done. \n"; - std::string ErrorInfo; - raw_fd_ostream O(Filename.c_str(), ErrorInfo); - - if (ErrorInfo.empty()) { - llvm::WriteGraph(O, G, ShortNames, Title); - errs() << " done. \n"; - } else { - errs() << "error opening file '" << Filename.str() << "' for writing!\n"; - Filename.clear(); - } - - return Filename; + return sys::Path(FilePath.str()); } /// ViewGraph - Emit a dot graph, run 'dot', run gv on the postscript file,