diff options
author | Reid Spencer <rspencer@reidspencer.com> | 2004-12-13 18:25:27 +0000 |
---|---|---|
committer | Reid Spencer <rspencer@reidspencer.com> | 2004-12-13 18:25:27 +0000 |
commit | cd89ca3040d8086c0ec5e29f495ef27186ca29cd (patch) | |
tree | 361d68e4d491d4db81fb9842a3bb7bd600cb4b1a /llvm/lib/Bytecode/Reader | |
parent | 7c7705d108654bdd32781bc09569c9fb0476a283 (diff) | |
download | bcm5719-llvm-cd89ca3040d8086c0ec5e29f495ef27186ca29cd.tar.gz bcm5719-llvm-cd89ca3040d8086c0ec5e29f495ef27186ca29cd.zip |
For PR351:
Use sys::MappedFile instead of ReadFileIntoAddressSpace and
UnmapFileFromAddressSpace. sys::MappedFile has the nice property that it
cleans up after itself so exception handling can be removed.
llvm-svn: 18902
Diffstat (limited to 'llvm/lib/Bytecode/Reader')
-rw-r--r-- | llvm/lib/Bytecode/Reader/ReaderWrappers.cpp | 26 |
1 files changed, 6 insertions, 20 deletions
diff --git a/llvm/lib/Bytecode/Reader/ReaderWrappers.cpp b/llvm/lib/Bytecode/Reader/ReaderWrappers.cpp index fccbbe74fbb..82b466830ce 100644 --- a/llvm/lib/Bytecode/Reader/ReaderWrappers.cpp +++ b/llvm/lib/Bytecode/Reader/ReaderWrappers.cpp @@ -17,9 +17,9 @@ #include "Reader.h" #include "llvm/Module.h" #include "llvm/Instructions.h" -#include "llvm/Support/FileUtilities.h" #include "llvm/ADT/StringExtras.h" #include "llvm/Config/unistd.h" +#include "llvm/System/MappedFile.h" #include <cerrno> using namespace llvm; @@ -32,15 +32,13 @@ namespace { /// class BytecodeFileReader : public BytecodeReader { private: - unsigned char *Buffer; - unsigned Length; + sys::MappedFile mapFile; BytecodeFileReader(const BytecodeFileReader&); // Do not implement void operator=(const BytecodeFileReader &BFR); // Do not implement public: BytecodeFileReader(const std::string &Filename, llvm::BytecodeHandler* H=0); - ~BytecodeFileReader(); }; } @@ -51,23 +49,11 @@ static std::string ErrnoMessage (int savedErrNum, std::string descr) { BytecodeFileReader::BytecodeFileReader(const std::string &Filename, llvm::BytecodeHandler* H ) : BytecodeReader(H) + , mapFile( sys::Path(Filename)) { - Buffer = (unsigned char*)ReadFileIntoAddressSpace(Filename, Length); - if (Buffer == 0) - throw "Error reading file '" + Filename + "'."; - - try { - // Parse the bytecode we mmapped in - ParseBytecode(Buffer, Length, Filename); - } catch (...) { - UnmapFileFromAddressSpace(Buffer, Length); - throw; - } -} - -BytecodeFileReader::~BytecodeFileReader() { - // Unmmap the bytecode... - UnmapFileFromAddressSpace(Buffer, Length); + mapFile.map(); + unsigned char* buffer = reinterpret_cast<unsigned char*>(mapFile.base()); + ParseBytecode(buffer, mapFile.size(), Filename); } //===----------------------------------------------------------------------===// |