For PR351:
authorReid Spencer <rspencer@reidspencer.com>
Mon, 13 Dec 2004 18:25:27 +0000 (18:25 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Mon, 13 Dec 2004 18:25:27 +0000 (18:25 +0000)
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

index fccbbe74fbbdd77b958be9a36f71e85d1856b3c9..82b466830ced04ac2829f386ff1587f6ab19e91d 100644 (file)
@@ -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);
 }
 
 //===----------------------------------------------------------------------===//