Add a helper function to reduce a bit of code duplication.
authorRafael Espindola <rafael.espindola@gmail.com>
Wed, 8 Jul 2015 17:08:26 +0000 (17:08 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Wed, 8 Jul 2015 17:08:26 +0000 (17:08 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241691 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Object/ArchiveWriter.cpp

index 1d04b4ac0b215dd900ce234d3d5ff08a0bfaf2a3..8ac8d7c31a23e1abb305643c8254a6cbcb753a1a 100644 (file)
@@ -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();