From: Saleem Abdulrasool Date: Wed, 22 Jun 2016 15:44:25 +0000 (+0000) Subject: llvm-ar: reduce some duplication, NFC X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=126491ead43674ea3522819a9c9a5220ffec5e10;p=llvm 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 --- 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> OptionalObject = + object::ObjectFile::createObjectFile(Buffer); + + if (OptionalObject) + return isa(**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> OptionalObject = - object::ObjectFile::createObjectFile(MemoryBuffer); - - if (OptionalObject) - Kind = isa(**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> OptionalObject = - object::ObjectFile::createObjectFile(*OptionalMB); - - if (OptionalObject) - return isa(*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); } }