diff options
Diffstat (limited to 'contrib/llvm-project/llvm/lib/Support/MemoryBuffer.cpp')
| -rw-r--r-- | contrib/llvm-project/llvm/lib/Support/MemoryBuffer.cpp | 31 |
1 files changed, 8 insertions, 23 deletions
diff --git a/contrib/llvm-project/llvm/lib/Support/MemoryBuffer.cpp b/contrib/llvm-project/llvm/lib/Support/MemoryBuffer.cpp index e4027ca7bbfd..d0e5bb154c1a 100644 --- a/contrib/llvm-project/llvm/lib/Support/MemoryBuffer.cpp +++ b/contrib/llvm-project/llvm/lib/Support/MemoryBuffer.cpp @@ -211,17 +211,15 @@ static ErrorOr<std::unique_ptr<WritableMemoryBuffer>> getMemoryBufferForStream(sys::fs::file_t FD, const Twine &BufferName) { const ssize_t ChunkSize = 4096*4; SmallString<ChunkSize> Buffer; + size_t ReadBytes; // Read into Buffer until we hit EOF. - for (;;) { + do { Buffer.reserve(Buffer.size() + ChunkSize); - Expected<size_t> ReadBytes = sys::fs::readNativeFile( - FD, makeMutableArrayRef(Buffer.end(), ChunkSize)); - if (!ReadBytes) - return errorToErrorCode(ReadBytes.takeError()); - if (*ReadBytes == 0) - break; - Buffer.set_size(Buffer.size() + *ReadBytes); - } + if (auto EC = sys::fs::readNativeFile( + FD, makeMutableArrayRef(Buffer.end(), ChunkSize), &ReadBytes)) + return EC; + Buffer.set_size(Buffer.size() + ReadBytes); + } while (ReadBytes != 0); return getMemBufferCopyImpl(Buffer, BufferName); } @@ -460,20 +458,7 @@ getOpenFileImpl(sys::fs::file_t FD, const Twine &Filename, uint64_t FileSize, return make_error_code(errc::not_enough_memory); } - // Read until EOF, zero-initialize the rest. - MutableArrayRef<char> ToRead = Buf->getBuffer(); - while (!ToRead.empty()) { - Expected<size_t> ReadBytes = - sys::fs::readNativeFileSlice(FD, ToRead, Offset); - if (!ReadBytes) - return errorToErrorCode(ReadBytes.takeError()); - if (*ReadBytes == 0) { - std::memset(ToRead.data(), 0, ToRead.size()); - break; - } - ToRead = ToRead.drop_front(*ReadBytes); - Offset += *ReadBytes; - } + sys::fs::readNativeFileSlice(FD, Buf->getBuffer(), Offset); return std::move(Buf); } |
