Use RequiresNullTerminator to create buffers without a null terminator

instead of copying.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127835 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Rafael Espindola 2011-03-17 22:18:42 +00:00
parent 813c9a0f19
commit 9916d2ac39
3 changed files with 8 additions and 12 deletions

View File

@ -81,7 +81,8 @@ public:
/// getMemBuffer - Open the specified memory range as a MemoryBuffer. Note
/// that InputData must be null terminated.
static MemoryBuffer *getMemBuffer(StringRef InputData,
StringRef BufferName = "");
StringRef BufferName = "",
bool RequiresNullTerminator = true);
/// getMemBufferCopy - Open the specified memory range as a MemoryBuffer,
/// copying the contents and taking ownership of it. InputData does not

View File

@ -92,8 +92,10 @@ public:
/// getMemBuffer - Open the specified memory range as a MemoryBuffer. Note
/// that EndPtr[0] must be a null byte and be accessible!
MemoryBuffer *MemoryBuffer::getMemBuffer(StringRef InputData,
StringRef BufferName) {
return GetNamedBuffer<MemoryBufferMem>(InputData, BufferName, true);
StringRef BufferName,
bool RequiresNullTerminator) {
return GetNamedBuffer<MemoryBufferMem>(InputData, BufferName,
RequiresNullTerminator);
}
/// getMemBufferCopy - Open the specified memory range as a MemoryBuffer,

View File

@ -114,18 +114,11 @@ LTOModule *LTOModule::makeLTOModule(int fd, const char *path,
return makeLTOModule(buffer.get(), errMsg);
}
/// makeBuffer - Create a MemoryBuffer from a memory range. MemoryBuffer
/// requires the byte past end of the buffer to be a zero. We might get lucky
/// and already be that way, otherwise make a copy. Also if next byte is on a
/// different page, don't assume it is readable.
/// makeBuffer - Create a MemoryBuffer from a memory range.
MemoryBuffer *LTOModule::makeBuffer(const void *mem, size_t length) {
const char *startPtr = (char*)mem;
const char *endPtr = startPtr+length;
if (((uintptr_t)endPtr & (sys::Process::GetPageSize()-1)) == 0 ||
*endPtr != 0)
return MemoryBuffer::getMemBufferCopy(StringRef(startPtr, length));
return MemoryBuffer::getMemBuffer(StringRef(startPtr, length));
return MemoryBuffer::getMemBuffer(StringRef(startPtr, length), "", false);
}