using namespace llvm;
-NewArchiveIterator::NewArchiveIterator(object::Archive::child_iterator I,
+NewArchiveIterator::NewArchiveIterator(const object::Archive::Child &OldMember,
StringRef Name)
- : IsNewMember(false), Name(Name), OldI(I) {}
+ : IsNewMember(false), Name(Name), OldMember(OldMember) {}
NewArchiveIterator::NewArchiveIterator(StringRef FileName)
- : IsNewMember(true), Name(FileName) {}
+ : IsNewMember(true), Name(FileName), OldMember(nullptr, nullptr, nullptr) {}
StringRef NewArchiveIterator::getName() const { return Name; }
bool NewArchiveIterator::isNewMember() const { return IsNewMember; }
-object::Archive::child_iterator NewArchiveIterator::getOld() const {
+const object::Archive::Child &NewArchiveIterator::getOld() const {
assert(!IsNewMember);
- return OldI;
+ return OldMember;
}
StringRef NewArchiveIterator::getNew() const {
Buffers.push_back(std::move(MemberBufferOrErr.get()));
MemberRef = Buffers.back()->getMemBufferRef();
} else {
- object::Archive::child_iterator OldMember = Member.getOld();
- assert((!Thin || (*OldMember && (*OldMember)->getParent()->isThin())) &&
+ const object::Archive::Child &OldMember = Member.getOld();
+ assert((!Thin || OldMember.getParent()->isThin()) &&
"Thin archives cannot refers to member of other archives");
ErrorOr<MemoryBufferRef> MemberBufferOrErr =
- (*OldMember)->getMemoryBufferRef();
+ OldMember.getMemoryBufferRef();
if (auto EC = MemberBufferOrErr.getError())
return std::make_pair("", EC);
MemberRef = MemberBufferOrErr.get();
GID = Status.getGroup();
Perms = Status.permissions();
} else {
- object::Archive::child_iterator OldMember = I.getOld();
- ModTime = (*OldMember)->getLastModified();
- UID = (*OldMember)->getUID();
- GID = (*OldMember)->getGID();
- Perms = (*OldMember)->getAccessMode();
+ const object::Archive::Child &OldMember = I.getOld();
+ ModTime = OldMember.getLastModified();
+ UID = OldMember.getUID();
+ GID = OldMember.getGID();
+ Perms = OldMember.getAccessMode();
}
if (I.isNewMember()) {
StringMapIndexIter, ModTime, UID, GID, Perms,
Status.getSize());
} else {
- object::Archive::child_iterator OldMember = I.getOld();
- ErrorOr<uint32_t> Size = (*OldMember)->getSize();
+ const object::Archive::Child &OldMember = I.getOld();
+ ErrorOr<uint32_t> Size = OldMember.getSize();
if (std::error_code EC = Size.getError())
return std::make_pair("", EC);
- printMemberHeader(Out, Kind, Thin, I.getName(), StringMapIndexIter,
- ModTime, UID, GID, Perms, Size.get());
+ StringRef FileName = I.getName();
+ printMemberHeader(Out, Kind, Thin, sys::path::filename(FileName),
+ StringMapIndexIter, ModTime, UID, GID, Perms,
+ Size.get());
}
if (!Thin)