- StringRef ObjectData = ParentData.substr(Header.Offset, Header.Size);
- std::string ObjectName =
- Parent->getFileName().str() + ":" +
- Triple::getArchTypeName(MachOObjectFile::getArch(Header.CPUType));
- MemoryBuffer *ObjBuffer = MemoryBuffer::getMemBuffer(
- ObjectData, ObjectName, false);
- if (ObjectFile *Obj = ObjectFile::createMachOObjectFile(ObjBuffer)) {
- Result.reset(Obj);
- return object_error::success;
- }
+ StringRef ObjectData = ParentData.substr(Header.offset, Header.size);
+ std::string ObjectName = Parent->getFileName().str();
+ std::unique_ptr<MemoryBuffer> ObjBuffer(
+ MemoryBuffer::getMemBuffer(ObjectData, ObjectName, false));
+ return ObjectFile::createMachOObjectFile(ObjBuffer);
+ }
+ return object_error::parse_failed;
+}
+
+std::error_code MachOUniversalBinary::ObjectForArch::getAsArchive(
+ std::unique_ptr<Archive> &Result) const {
+ if (Parent) {
+ StringRef ParentData = Parent->getData();
+ StringRef ObjectData = ParentData.substr(Header.offset, Header.size);
+ std::string ObjectName = Parent->getFileName().str();
+ std::unique_ptr<MemoryBuffer> ObjBuffer(
+ MemoryBuffer::getMemBuffer(ObjectData, ObjectName, false));
+ ErrorOr<std::unique_ptr<Archive>> Obj =
+ Archive::create(std::move(ObjBuffer));
+ if (std::error_code EC = Obj.getError())
+ return EC;
+ Result = std::move(Obj.get());
+ return object_error::success;