mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
[Support/MemoryBuffer] Move the IsVolatile check inside shouldUseMmap() and make sure to zero-initialize the rest
of the buffer if we unexpectedly reach end-of-file while reading. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@208021 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
096d8411b3
commit
6a914399c9
@ -305,7 +305,14 @@ static bool shouldUseMmap(int FD,
|
||||
size_t MapSize,
|
||||
off_t Offset,
|
||||
bool RequiresNullTerminator,
|
||||
int PageSize) {
|
||||
int PageSize,
|
||||
bool IsVolatile) {
|
||||
// mmap may leave the buffer without null terminator if the file size changed
|
||||
// by the time the last page is mapped in, so avoid it if the file size is
|
||||
// likely to change.
|
||||
if (IsVolatile)
|
||||
return false;
|
||||
|
||||
// We don't use mmap for small files because this can severely fragment our
|
||||
// address space.
|
||||
if (MapSize < 4 * 4096 || MapSize < (unsigned)PageSize)
|
||||
@ -381,9 +388,8 @@ static error_code getOpenFileImpl(int FD, const char *Filename,
|
||||
MapSize = FileSize;
|
||||
}
|
||||
|
||||
if (!IsVolatile &&
|
||||
shouldUseMmap(FD, FileSize, MapSize, Offset, RequiresNullTerminator,
|
||||
PageSize)) {
|
||||
if (shouldUseMmap(FD, FileSize, MapSize, Offset, RequiresNullTerminator,
|
||||
PageSize, IsVolatile)) {
|
||||
error_code EC;
|
||||
Result.reset(new (NamedBufferAlloc(Filename)) MemoryBufferMMapFile(
|
||||
RequiresNullTerminator, FD, MapSize, Offset, EC));
|
||||
@ -420,9 +426,9 @@ static error_code getOpenFileImpl(int FD, const char *Filename,
|
||||
return error_code(errno, posix_category());
|
||||
}
|
||||
if (NumRead == 0) {
|
||||
assert(0 && "We got inaccurate FileSize value or fstat reported an "
|
||||
"invalid file size.");
|
||||
*BufPtr = '\0'; // null-terminate at the actual size.
|
||||
assert(IsVolatile && "We got inaccurate FileSize value or fstat reported "
|
||||
"an invalid file size.");
|
||||
memset(BufPtr, 0, BytesLeft); // zero-initialize rest of the buffer.
|
||||
break;
|
||||
}
|
||||
BytesLeft -= NumRead;
|
||||
|
Loading…
Reference in New Issue
Block a user