// Returns a buffer pointing to a member file containing a given symbol. // This function is thread-safe. MemoryBufferRef ArchiveFile::getMember(const Archive::Symbol *Sym) { const Archive::Child &C = check(Sym->getMember(), "could not get the member for symbol " + Sym->getName()); // Return an empty buffer if we have already returned the same buffer. if (Seen[C.getChildOffset()].test_and_set()) return MemoryBufferRef(); return check(C.getMemoryBufferRef(), "could not get the buffer for the member defining symbol " + Sym->getName()); }
// Returns a buffer pointing to a member file containing a given symbol. // This function is thread-safe. MemoryBufferRef ArchiveFile::getMember(const Archive::Symbol *Sym) { auto COrErr = Sym->getMember(); error(COrErr, Twine("Could not get the member for symbol ") + Sym->getName()); const Archive::Child &C = *COrErr; // Return an empty buffer if we have already returned the same buffer. if (Seen[C.getChildOffset()].test_and_set()) return MemoryBufferRef(); ErrorOr<MemoryBufferRef> Ret = C.getMemoryBufferRef(); error(Ret, Twine("Could not get the buffer for the member defining symbol ") + Sym->getName()); return *Ret; }