summaryrefslogtreecommitdiffstats
path: root/clang/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
commit623e8778c12c193ffc6afc61cd0dcccb7d5f3916 (patch)
tree84e2cea19d2a8506a213b32b2ebfaa85c398bba2 /clang/lib/Rewrite/FixItRewriter.cpp
parent60835eb11ec8fabb816ff7e3881bedeac8a0493d (diff)
downloadbcm5719-llvm-623e8778c12c193ffc6afc61cd0dcccb7d5f3916.tar.gz
bcm5719-llvm-623e8778c12c193ffc6afc61cd0dcccb7d5f3916.zip
In FixItRewriteToTemp::RewriteFilename don't try to close the file descriptor
with close(); return it instead. Fixes mingw build and eliminates possible racing issues. llvm-svn: 149043
Diffstat (limited to 'clang/lib/Rewrite/FixItRewriter.cpp')
-rw-r--r--clang/lib/Rewrite/FixItRewriter.cpp16
1 files changed, 11 insertions, 5 deletions
diff --git a/clang/lib/Rewrite/FixItRewriter.cpp b/clang/lib/Rewrite/FixItRewriter.cpp
index 51029665e47..aa57813e598 100644
--- a/clang/lib/Rewrite/FixItRewriter.cpp
+++ b/clang/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));
OpenPOWER on IntegriCloud