Use TempFile in llvm-ar. NFC.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@318127 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Rafael Espindola 2017-11-14 01:21:15 +00:00
parent c3e65d9d3c
commit 79f20d27db

View File

@ -488,14 +488,12 @@ Error llvm::writeArchive(StringRef ArcName,
Kind = object::Archive::K_GNU64; Kind = object::Archive::K_GNU64;
} }
SmallString<128> TmpArchive; Expected<sys::fs::TempFile> Temp =
int TmpArchiveFD; sys::fs::TempFile::create(ArcName + ".temp-archive-%%%%%%%.a");
if (auto EC = sys::fs::createUniqueFile(ArcName + ".temp-archive-%%%%%%%.a", if (!Temp)
TmpArchiveFD, TmpArchive)) return Temp.takeError();
return errorCodeToError(EC);
ToolOutputFile Output(TmpArchive, TmpArchiveFD); raw_fd_ostream Out(Temp->FD, false);
raw_fd_ostream &Out = Output.os();
if (Thin) if (Thin)
Out << "!<thin>\n"; Out << "!<thin>\n";
else else
@ -507,8 +505,7 @@ Error llvm::writeArchive(StringRef ArcName,
for (const MemberData &M : Data) for (const MemberData &M : Data)
Out << M.Header << M.Data << M.Padding; Out << M.Header << M.Data << M.Padding;
Output.keep(); Out.flush();
Out.close();
// At this point, we no longer need whatever backing memory // At this point, we no longer need whatever backing memory
// was used to generate the NewMembers. On Windows, this buffer // was used to generate the NewMembers. On Windows, this buffer
@ -522,6 +519,5 @@ Error llvm::writeArchive(StringRef ArcName,
// closed before we attempt to rename. // closed before we attempt to rename.
OldArchiveBuf.reset(); OldArchiveBuf.reset();
sys::fs::rename(TmpArchive, ArcName); return Temp->keep(ArcName);
return Error::success();
} }