summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Object/ArchiveWriter.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2015-07-08 17:08:26 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2015-07-08 17:08:26 +0000
commitc291a4b212b531bd0b3a007657ad0b530e84b154 (patch)
tree9ee24c4f50ed572f811d36bbb97989c09f9ad3f1 /llvm/lib/Object/ArchiveWriter.cpp
parent26686c4af0cbda767de2068f27a7680dfe51276a (diff)
downloadbcm5719-llvm-c291a4b212b531bd0b3a007657ad0b530e84b154.tar.gz
bcm5719-llvm-c291a4b212b531bd0b3a007657ad0b530e84b154.zip
Add a helper function to reduce a bit of code duplication.
llvm-svn: 241691
Diffstat (limited to 'llvm/lib/Object/ArchiveWriter.cpp')
-rw-r--r--llvm/lib/Object/ArchiveWriter.cpp47
1 files changed, 22 insertions, 25 deletions
diff --git a/llvm/lib/Object/ArchiveWriter.cpp b/llvm/lib/Object/ArchiveWriter.cpp
index 1d04b4ac0b2..8ac8d7c31a2 100644
--- a/llvm/lib/Object/ArchiveWriter.cpp
+++ b/llvm/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<unsigned>::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<NewArchiveIterator> Members,
std::vector<unsigned> &StringMapIndexes) {
@@ -278,8 +290,8 @@ llvm::writeArchive(StringRef ArcName,
writeStringTable(Out, NewMembers, StringMapIndexes);
unsigned MemberNum = 0;
- unsigned LongNameMemberNum = 0;
unsigned NewMemberNum = 0;
+ std::vector<unsigned>::iterator StringMapIndexIter = StringMapIndexes.begin();
std::vector<unsigned> 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();
OpenPOWER on IntegriCloud