X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FObject%2FBinary.cpp;h=89e9d732ce9dcc9a95c410f33ed5c3cc4036a536;hb=6c0e1e0fa658f4e7466c6787aedce992ece2db55;hp=785b3d2318b3e331105b4d4aae5f6f2d09a1bb0d;hpb=1f659329b63aa1d1af2b2bfc8b174a8ccdaba2c0;p=oota-llvm.git diff --git a/lib/Object/Binary.cpp b/lib/Object/Binary.cpp index 785b3d2318b..89e9d732ce9 100644 --- a/lib/Object/Binary.cpp +++ b/lib/Object/Binary.cpp @@ -27,8 +27,8 @@ using namespace object; Binary::~Binary() {} -Binary::Binary(unsigned int Type, MemoryBuffer *Source) - : TypeID(Type), Data(Source) {} +Binary::Binary(unsigned int Type, std::unique_ptr Source) + : TypeID(Type), Data(std::move(Source)) {} StringRef Binary::getData() const { return Data->getBuffer(); @@ -38,13 +38,14 @@ StringRef Binary::getFileName() const { return Data->getBufferIdentifier(); } -ErrorOr object::createBinary(MemoryBuffer *Buffer, - LLVMContext *Context) { +ErrorOr> +object::createBinary(std::unique_ptr Buffer, + LLVMContext *Context) { sys::fs::file_magic Type = sys::fs::identify_magic(Buffer->getBuffer()); switch (Type) { case sys::fs::file_magic::archive: - return Archive::create(Buffer); + return Archive::create(std::move(Buffer)); case sys::fs::file_magic::elf_relocatable: case sys::fs::file_magic::elf_executable: case sys::fs::file_magic::elf_shared_object: @@ -65,7 +66,7 @@ ErrorOr object::createBinary(MemoryBuffer *Buffer, case sys::fs::file_magic::bitcode: return ObjectFile::createSymbolicFile(Buffer, Type, Context); case sys::fs::file_magic::macho_universal_binary: - return MachOUniversalBinary::create(Buffer); + return MachOUniversalBinary::create(std::move(Buffer)); case sys::fs::file_magic::unknown: case sys::fs::file_magic::windows_resource: // Unrecognized object file format. @@ -74,9 +75,10 @@ ErrorOr object::createBinary(MemoryBuffer *Buffer, llvm_unreachable("Unexpected Binary File Type"); } -ErrorOr object::createBinary(StringRef Path) { - std::unique_ptr File; - if (std::error_code EC = MemoryBuffer::getFileOrSTDIN(Path, File)) +ErrorOr> object::createBinary(StringRef Path) { + ErrorOr> FileOrErr = + MemoryBuffer::getFileOrSTDIN(Path); + if (std::error_code EC = FileOrErr.getError()) return EC; - return createBinary(File.release()); + return createBinary(std::move(*FileOrErr)); }