diff options
author | Saleem Abdulrasool <compnerd@compnerd.org> | 2016-06-22 15:44:25 +0000 |
---|---|---|
committer | Saleem Abdulrasool <compnerd@compnerd.org> | 2016-06-22 15:44:25 +0000 |
commit | 126491ead43674ea3522819a9c9a5220ffec5e10 (patch) | |
tree | ba42bb58281e3d6cf518a423eeca939c24c15746 /tools/llvm-ar | |
parent | b2b7d8b579038b74b4423591adf774447dca71e4 (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.cpp | 46 |
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); } } |