diff options
author | Chris Lattner <sabre@nondot.org> | 2007-05-06 23:32:36 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-05-06 23:32:36 +0000 |
commit | 5499da88331a31a9dcc24dc160f58b411fb0d34a (patch) | |
tree | e9fcb8c7924517177055f033ab3831a3dc078c64 /lib/Support/MemoryBuffer.cpp | |
parent | c57ed8b2980fd155b9e0048670a7423184921d34 (diff) |
Enhance MemoryBuffer to return error messages in strings if they occur.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36899 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Support/MemoryBuffer.cpp')
-rw-r--r-- | lib/Support/MemoryBuffer.cpp | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/lib/Support/MemoryBuffer.cpp b/lib/Support/MemoryBuffer.cpp index ffbb4beccf..b2c561c77a 100644 --- a/lib/Support/MemoryBuffer.cpp +++ b/lib/Support/MemoryBuffer.cpp @@ -113,7 +113,7 @@ class MemoryBufferMMapFile : public MemoryBuffer { public: MemoryBufferMMapFile() {} - bool open(const sys::Path &Filename); + bool open(const sys::Path &Filename, std::string *ErrStr); virtual const char *getBufferIdentifier() const { return File.path().c_str(); @@ -123,13 +123,15 @@ public: }; } -bool MemoryBufferMMapFile::open(const sys::Path &Filename) { +bool MemoryBufferMMapFile::open(const sys::Path &Filename, + std::string *ErrStr) { // FIXME: This does an extra stat syscall to figure out the size, but we // already know the size! - bool Failure = File.open(Filename); + bool Failure = File.open(Filename, sys::MappedFile::READ_ACCESS, ErrStr); if (Failure) return true; - File.map(); + if (!File.map(ErrStr)) + return true; size_t Size = File.size(); @@ -161,11 +163,13 @@ MemoryBufferMMapFile::~MemoryBufferMMapFile() { //===----------------------------------------------------------------------===// MemoryBuffer *MemoryBuffer::getFile(const char *FilenameStart, unsigned FnSize, - int64_t FileSize) { + std::string *ErrStr, int64_t FileSize){ + // FIXME: it would be nice if PathWithStatus didn't copy the filename into a + // temporary string. :( sys::PathWithStatus P(FilenameStart, FnSize); #if 1 MemoryBufferMMapFile *M = new MemoryBufferMMapFile(); - if (!M->open(P)) + if (!M->open(P, ErrStr)) return M; delete M; return 0; @@ -186,7 +190,7 @@ MemoryBuffer *MemoryBuffer::getFile(const char *FilenameStart, unsigned FnSize, // If the file is larger than some threshold, use mmap, otherwise use 'read'. if (FileSize >= 4096*4) { MemoryBufferMMapFile *M = new MemoryBufferMMapFile(); - if (!M->open(P)) + if (!M->open(P, ErrStr)) return M; delete M; return 0; |