diff options
Diffstat (limited to 'llvm/lib/Archive')
-rw-r--r-- | llvm/lib/Archive/Archive.cpp | 15 | ||||
-rw-r--r-- | llvm/lib/Archive/ArchiveWriter.cpp | 18 |
2 files changed, 25 insertions, 8 deletions
diff --git a/llvm/lib/Archive/Archive.cpp b/llvm/lib/Archive/Archive.cpp index e2e5593c6bf..3ce7fbdc948 100644 --- a/llvm/lib/Archive/Archive.cpp +++ b/llvm/lib/Archive/Archive.cpp @@ -17,6 +17,7 @@ #include "llvm/Module.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/Process.h" +#include "llvm/Support/system_error.h" #include <memory> #include <cstring> using namespace llvm; @@ -147,9 +148,13 @@ Archive::Archive(const sys::Path& filename, LLVMContext& C) bool Archive::mapToMemory(std::string* ErrMsg) { - mapfile = MemoryBuffer::getFile(archPath.c_str(), ErrMsg); - if (mapfile == 0) + error_code ec; + mapfile = MemoryBuffer::getFile(archPath.c_str(), ec); + if (mapfile == 0) { + if (ErrMsg) + *ErrMsg = ec.message(); return true; + } base = mapfile->getBufferStart(); return false; } @@ -213,10 +218,12 @@ bool llvm::GetBitcodeSymbols(const sys::Path& fName, LLVMContext& Context, std::vector<std::string>& symbols, std::string* ErrMsg) { + error_code ec; std::auto_ptr<MemoryBuffer> Buffer( - MemoryBuffer::getFileOrSTDIN(fName.c_str())); + MemoryBuffer::getFileOrSTDIN(fName.c_str(), ec)); if (!Buffer.get()) { - if (ErrMsg) *ErrMsg = "Could not open file '" + fName.str() + "'"; + if (ErrMsg) *ErrMsg = "Could not open file '" + fName.str() + "'" + ": " + + ec.message(); return true; } diff --git a/llvm/lib/Archive/ArchiveWriter.cpp b/llvm/lib/Archive/ArchiveWriter.cpp index de5887e5c79..e9222c5e094 100644 --- a/llvm/lib/Archive/ArchiveWriter.cpp +++ b/llvm/lib/Archive/ArchiveWriter.cpp @@ -18,6 +18,7 @@ #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/Process.h" #include "llvm/Support/Signals.h" +#include "llvm/Support/system_error.h" #include <fstream> #include <ostream> #include <iomanip> @@ -212,9 +213,13 @@ Archive::writeMember( const char *data = (const char*)member.getData(); MemoryBuffer *mFile = 0; if (!data) { - mFile = MemoryBuffer::getFile(member.getPath().c_str(), ErrMsg); - if (mFile == 0) + error_code ec; + mFile = MemoryBuffer::getFile(member.getPath().c_str(), ec); + if (mFile == 0) { + if (ErrMsg) + *ErrMsg = ec.message(); return true; + } data = mFile->getBufferStart(); fSize = mFile->getBufferSize(); } @@ -406,8 +411,13 @@ Archive::writeToDisk(bool CreateSymbolTable, bool TruncateNames, bool Compress, // Map in the archive we just wrote. { - OwningPtr<MemoryBuffer> arch(MemoryBuffer::getFile(TmpArchive.c_str())); - if (arch == 0) return true; + error_code ec; + OwningPtr<MemoryBuffer> arch(MemoryBuffer::getFile(TmpArchive.c_str(), ec)); + if (arch == 0) { + if (ErrMsg) + *ErrMsg = ec.message(); + return true; + } const char* base = arch->getBufferStart(); // Open another temporary file in order to avoid invalidating the |