summaryrefslogtreecommitdiff
path: root/tools/llvm-ar
diff options
context:
space:
mode:
authorSaleem Abdulrasool <compnerd@compnerd.org>2016-06-22 15:44:25 +0000
committerSaleem Abdulrasool <compnerd@compnerd.org>2016-06-22 15:44:25 +0000
commit126491ead43674ea3522819a9c9a5220ffec5e10 (patch)
treeba42bb58281e3d6cf518a423eeca939c24c15746 /tools/llvm-ar
parentb2b7d8b579038b74b4423591adf774447dca71e4 (diff)
llvm-ar: reduce some duplication, NFC
Improve the previous change by using a local function to reduce the duplication of the object file scanning. NFC. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273429 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/llvm-ar')
-rw-r--r--tools/llvm-ar/llvm-ar.cpp46
1 files changed, 19 insertions, 27 deletions
diff --git a/tools/llvm-ar/llvm-ar.cpp b/tools/llvm-ar/llvm-ar.cpp
index 0078bda4db4..51c4fed743b 100644
--- a/tools/llvm-ar/llvm-ar.cpp
+++ b/tools/llvm-ar/llvm-ar.cpp
@@ -583,27 +583,29 @@ static object::Archive::Kind getDefaultForHost() {
static object::Archive::Kind
getKindFromMember(const NewArchiveIterator &Member) {
+ auto getKindFromMemberInner =
+ [](MemoryBufferRef Buffer) -> object::Archive::Kind {
+ Expected<std::unique_ptr<object::ObjectFile>> OptionalObject =
+ object::ObjectFile::createObjectFile(Buffer);
+
+ if (OptionalObject)
+ return isa<object::MachOObjectFile>(**OptionalObject)
+ ? object::Archive::K_BSD
+ : object::Archive::K_GNU;
+
+ // squelch the error in case we had a non-object file
+ consumeError(OptionalObject.takeError());
+ return getDefaultForHost();
+ };
+
if (Member.isNewMember()) {
object::Archive::Kind Kind = getDefaultForHost();
sys::fs::file_status Status;
if (auto OptionalFD = Member.getFD(Status)) {
- auto OptionalMB = MemoryBuffer::getOpenFile(*OptionalFD, Member.getName(),
- Status.getSize(), false);
- if (OptionalMB) {
- MemoryBufferRef MemoryBuffer = (*OptionalMB)->getMemBufferRef();
-
- Expected<std::unique_ptr<object::ObjectFile>> OptionalObject =
- object::ObjectFile::createObjectFile(MemoryBuffer);
-
- if (OptionalObject)
- Kind = isa<object::MachOObjectFile>(**OptionalObject)
- ? object::Archive::K_BSD
- : object::Archive::K_GNU;
-
- // squelch the error in case we had a non-object file
- consumeError(OptionalObject.takeError());
- }
+ if (auto MB = MemoryBuffer::getOpenFile(*OptionalFD, Member.getName(),
+ Status.getSize(), false))
+ Kind = getKindFromMemberInner((*MB)->getMemBufferRef());
if (close(*OptionalFD) != 0)
failIfError(std::error_code(errno, std::generic_category()),
@@ -619,17 +621,7 @@ getKindFromMember(const NewArchiveIterator &Member) {
auto OptionalMB = OldMember.getMemoryBufferRef();
failIfError(OptionalMB.getError());
- Expected<std::unique_ptr<object::ObjectFile>> OptionalObject =
- object::ObjectFile::createObjectFile(*OptionalMB);
-
- if (OptionalObject)
- return isa<object::MachOObjectFile>(*OptionalObject->get())
- ? object::Archive::K_BSD
- : object::Archive::K_GNU;
-
- // squelch the error in case we had a non-object file
- consumeError(OptionalObject.takeError());
- return getDefaultForHost();
+ return getKindFromMemberInner(*OptionalMB);
}
}