We don't need a null terminator for the output file.
authorRafael Espindola <rafael.espindola@gmail.com>
Tue, 22 Mar 2011 19:20:47 +0000 (19:20 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Tue, 22 Mar 2011 19:20:47 +0000 (19:20 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128098 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Support/MemoryBuffer.h
lib/Support/MemoryBuffer.cpp
tools/lto/LTOCodeGenerator.cpp

index 3006367a5a0d8816a5f784e7e4e88f99d4668120..9a2aff04c7ff76cf78c95564015077a9b1061e42 100644 (file)
@@ -64,10 +64,12 @@ public:
   /// specified, this means that the client knows that the file exists and that
   /// it has the specified size.
   static error_code getFile(StringRef Filename, OwningPtr<MemoryBuffer> &result,
-                            int64_t FileSize = -1);
+                            int64_t FileSize = -1,
+                            bool RequiresNullTerminator = true);
   static error_code getFile(const char *Filename,
                             OwningPtr<MemoryBuffer> &result,
-                            int64_t FileSize = -1);
+                            int64_t FileSize = -1,
+                            bool RequiresNullTerminator = true);
 
   /// getOpenFile - Given an already-open file descriptor, read the file and
   /// return a MemoryBuffer.
index c08e91a38246d14ef6b6b771c10b30804662172d..ea72720b7f01c53e0cb7c799391cb0ab2c6b521a 100644 (file)
@@ -196,15 +196,18 @@ public:
 
 error_code MemoryBuffer::getFile(StringRef Filename,
                                  OwningPtr<MemoryBuffer> &result,
-                                 int64_t FileSize) {
+                                 int64_t FileSize,
+                                 bool RequiresNullTerminator) {
   // Ensure the path is null terminated.
   SmallString<256> PathBuf(Filename.begin(), Filename.end());
-  return MemoryBuffer::getFile(PathBuf.c_str(), result, FileSize);
+  return MemoryBuffer::getFile(PathBuf.c_str(), result, FileSize,
+                               RequiresNullTerminator);
 }
 
 error_code MemoryBuffer::getFile(const char *Filename,
                                  OwningPtr<MemoryBuffer> &result,
-                                 int64_t FileSize) {
+                                 int64_t FileSize,
+                                 bool RequiresNullTerminator) {
   int OpenFlags = O_RDONLY;
 #ifdef O_BINARY
   OpenFlags |= O_BINARY;  // Open input file in binary mode on win32.
@@ -213,7 +216,8 @@ error_code MemoryBuffer::getFile(const char *Filename,
   if (FD == -1) {
     return error_code(errno, posix_category());
   }
-  error_code ret = getOpenFile(FD, Filename, result, FileSize);
+  error_code ret = getOpenFile(FD, Filename, result, FileSize, FileSize,
+                               0, RequiresNullTerminator);
   close(FD);
   return ret;
 }
index ffe244dbcdc172a7fe33d105694c2f764fc9bdee..372cb31a4c2372c4e05cdf15ed5f26e21b599fe7 100644 (file)
@@ -209,8 +209,11 @@ const void* LTOCodeGenerator::compile(size_t* length, std::string& errMsg)
 
     // read .o file into memory buffer
     OwningPtr<MemoryBuffer> BuffPtr;
-    if (error_code ec = MemoryBuffer::getFile(uniqueObjStr.c_str(),BuffPtr))
+    if (error_code ec = MemoryBuffer::getFile(uniqueObjStr.c_str(), BuffPtr,
+                                              -1, false)) {
       errMsg = ec.message();
+      return NULL;
+    }
     _nativeObjectFile = BuffPtr.take();
 
     // remove temp files