From 9ff2cd5417e783b7043ff352eaf977d767c87644 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Wed, 8 Jul 2015 17:08:26 +0000 Subject: [PATCH] Add a helper function to reduce a bit of code duplication. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241691 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Object/ArchiveWriter.cpp | 47 +++++++++++++++++++++----------------------- 1 file changed, 22 insertions(+), 25 deletions(-) diff --git a/lib/Object/ArchiveWriter.cpp b/lib/Object/ArchiveWriter.cpp index 1d04b4ac0b2..8ac8d7c31a2 100644 --- a/lib/Object/ArchiveWriter.cpp +++ b/lib/Object/ArchiveWriter.cpp @@ -124,6 +124,18 @@ static void printMemberHeader(raw_fd_ostream &Out, unsigned NameOffset, printRestOfMemberHeader(Out, ModTime, UID, GID, Perms, Size); } +static void +printMemberHeader(raw_fd_ostream &Out, StringRef Name, + std::vector::iterator &StringMapIndexIter, + const sys::TimeValue &ModTime, unsigned UID, unsigned GID, + unsigned Perms, unsigned Size) { + if (Name.size() < 16) + printMemberHeader(Out, Name, ModTime, UID, GID, Perms, Size); + else + printMemberHeader(Out, *StringMapIndexIter++, ModTime, UID, GID, Perms, + Size); +} + static void writeStringTable(raw_fd_ostream &Out, ArrayRef Members, std::vector &StringMapIndexes) { @@ -278,8 +290,8 @@ llvm::writeArchive(StringRef ArcName, writeStringTable(Out, NewMembers, StringMapIndexes); unsigned MemberNum = 0; - unsigned LongNameMemberNum = 0; unsigned NewMemberNum = 0; + std::vector::iterator StringMapIndexIter = StringMapIndexes.begin(); std::vector MemberOffset; for (const NewArchiveIterator &I : NewMembers) { MemoryBufferRef File = Members[MemberNum++]; @@ -289,32 +301,17 @@ llvm::writeArchive(StringRef ArcName, if (I.isNewMember()) { StringRef FileName = I.getNew(); - const sys::fs::file_status &Status = NewMemberStatus[NewMemberNum]; - NewMemberNum++; - - StringRef Name = sys::path::filename(FileName); - if (Name.size() < 16) - printMemberHeader(Out, Name, Status.getLastModificationTime(), - Status.getUser(), Status.getGroup(), - Status.permissions(), Status.getSize()); - else - printMemberHeader(Out, StringMapIndexes[LongNameMemberNum++], - Status.getLastModificationTime(), Status.getUser(), - Status.getGroup(), Status.permissions(), - Status.getSize()); + const sys::fs::file_status &Status = NewMemberStatus[NewMemberNum++]; + printMemberHeader(Out, sys::path::filename(FileName), StringMapIndexIter, + Status.getLastModificationTime(), Status.getUser(), + Status.getGroup(), Status.permissions(), + Status.getSize()); } else { object::Archive::child_iterator OldMember = I.getOld(); - StringRef Name = I.getName(); - - if (Name.size() < 16) - printMemberHeader(Out, Name, OldMember->getLastModified(), - OldMember->getUID(), OldMember->getGID(), - OldMember->getAccessMode(), OldMember->getSize()); - else - printMemberHeader(Out, StringMapIndexes[LongNameMemberNum++], - OldMember->getLastModified(), OldMember->getUID(), - OldMember->getGID(), OldMember->getAccessMode(), - OldMember->getSize()); + printMemberHeader(Out, I.getName(), StringMapIndexIter, + OldMember->getLastModified(), OldMember->getUID(), + OldMember->getGID(), OldMember->getAccessMode(), + OldMember->getSize()); } Out << File.getBuffer(); -- 2.11.0