From 9153f8f4765aa7a55cfb28a0752469f5545e188a Mon Sep 17 00:00:00 2001 From: Reid Spencer Date: Mon, 13 Dec 2004 18:25:27 +0000 Subject: [PATCH] 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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@18902 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Bytecode/Reader/ReaderWrappers.cpp | 26 ++++++-------------------- 1 file changed, 6 insertions(+), 20 deletions(-) diff --git a/lib/Bytecode/Reader/ReaderWrappers.cpp b/lib/Bytecode/Reader/ReaderWrappers.cpp index fccbbe74fbb..82b466830ce 100644 --- a/lib/Bytecode/Reader/ReaderWrappers.cpp +++ b/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 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(mapFile.base()); + ParseBytecode(buffer, mapFile.size(), Filename); } //===----------------------------------------------------------------------===//