aboutsummaryrefslogtreecommitdiff
path: root/lib/Rewrite/FixItRewriter.cpp
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2012-01-26 04:19:04 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2012-01-26 04:19:04 +0000
commitc8af9107fd1eb014d9124b753c38c4d06fa219f4 (patch)
tree779e3232e8b43465c742dfc3036fc2d53cfd7e1a /lib/Rewrite/FixItRewriter.cpp
parentf81263f04b0c211e1f2e2a08aca74256654c362b (diff)
In FixItRewriteToTemp::RewriteFilename don't try to close the file descriptor
with close(); return it instead. Fixes mingw build and eliminates possible racing issues. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149043 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Rewrite/FixItRewriter.cpp')
-rw-r--r--lib/Rewrite/FixItRewriter.cpp16
1 files changed, 11 insertions, 5 deletions
diff --git a/lib/Rewrite/FixItRewriter.cpp b/lib/Rewrite/FixItRewriter.cpp
index 51029665e4..aa57813e59 100644
--- a/lib/Rewrite/FixItRewriter.cpp
+++ b/lib/Rewrite/FixItRewriter.cpp
@@ -60,18 +60,24 @@ bool FixItRewriter::WriteFixedFiles(
for (iterator I = buffer_begin(), E = buffer_end(); I != E; ++I) {
const FileEntry *Entry = Rewrite.getSourceMgr().getFileEntryForID(I->first);
- std::string Filename = FixItOpts->RewriteFilename(Entry->getName());
+ int fd;
+ std::string Filename = FixItOpts->RewriteFilename(Entry->getName(), fd);
std::string Err;
- llvm::raw_fd_ostream OS(Filename.c_str(), Err,
- llvm::raw_fd_ostream::F_Binary);
+ llvm::OwningPtr<llvm::raw_fd_ostream> OS;
+ if (fd != -1) {
+ OS.reset(new llvm::raw_fd_ostream(fd, /*shouldClose=*/true));
+ } else {
+ OS.reset(new llvm::raw_fd_ostream(Filename.c_str(), Err,
+ llvm::raw_fd_ostream::F_Binary));
+ }
if (!Err.empty()) {
Diags.Report(clang::diag::err_fe_unable_to_open_output)
<< Filename << Err;
continue;
}
RewriteBuffer &RewriteBuf = I->second;
- RewriteBuf.write(OS);
- OS.flush();
+ RewriteBuf.write(*OS);
+ OS->flush();
if (RewrittenFiles)
RewrittenFiles->push_back(std::make_pair(Entry->getName(), Filename));