diff options
author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2021-12-07 17:22:47 -0800 |
---|---|---|
committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2021-12-09 18:44:40 -0800 |
commit | 1131738698c49b194be278da3a2a21a7eaa915a9 (patch) | |
tree | 6e492c64ffc2091ecac370681f9fcdfd3df1e56c /llvm/lib/Support/MemoryBuffer.cpp | |
parent | 925ec98d000a9df7749e93e8831282cbbb5839b2 (diff) | |
download | llvm-1131738698c49b194be278da3a2a21a7eaa915a9.zip llvm-1131738698c49b194be278da3a2a21a7eaa915a9.tar.gz llvm-1131738698c49b194be278da3a2a21a7eaa915a9.tar.bz2 |
Support: Avoid using SmallVector::set_size() in MemoryBuffer
Update getMemoryBufferForStream() to use `resize_for_overwrite()` and
`truncate()` instead of `reserve()` and `set_size()`.
Differential Revision: https://reviews.llvm.org/D115384
Diffstat (limited to 'llvm/lib/Support/MemoryBuffer.cpp')
-rw-r--r-- | llvm/lib/Support/MemoryBuffer.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/llvm/lib/Support/MemoryBuffer.cpp b/llvm/lib/Support/MemoryBuffer.cpp index bcf13d8..d3fa3c6 100644 --- a/llvm/lib/Support/MemoryBuffer.cpp +++ b/llvm/lib/Support/MemoryBuffer.cpp @@ -227,17 +227,20 @@ static ErrorOr<std::unique_ptr<WritableMemoryBuffer>> getMemoryBufferForStream(sys::fs::file_t FD, const Twine &BufferName) { const ssize_t ChunkSize = 4096*4; SmallString<ChunkSize> Buffer; + // Read into Buffer until we hit EOF. + size_t Size = Buffer.size(); for (;;) { - Buffer.reserve(Buffer.size() + ChunkSize); + Buffer.resize_for_overwrite(Size + ChunkSize); Expected<size_t> ReadBytes = sys::fs::readNativeFile( - FD, makeMutableArrayRef(Buffer.end(), ChunkSize)); + FD, makeMutableArrayRef(Buffer.begin() + Size, ChunkSize)); if (!ReadBytes) return errorToErrorCode(ReadBytes.takeError()); if (*ReadBytes == 0) break; - Buffer.set_size(Buffer.size() + *ReadBytes); + Size += *ReadBytes; } + Buffer.truncate(Size); return getMemBufferCopyImpl(Buffer, BufferName); } |