diff --git a/lib/pure/streams.nim b/lib/pure/streams.nim index 68922f7301..f655a5cd7e 100644 --- a/lib/pure/streams.nim +++ b/lib/pure/streams.nim @@ -88,16 +88,18 @@ proc readData*(s: Stream, buffer: pointer, bufLen: int): int = proc readAll*(s: Stream): string = ## Reads all available data. - const bufferSize = 1000 + const bufferSize = 1024 result = newString(bufferSize) - var r = 0 + var buffer {.noinit.}: array[bufferSize, char] while true: - let readBytes = readData(s, addr(result[r]), bufferSize) - if readBytes < bufferSize: - setLen(result, r+readBytes) + let readBytes = readData(s, addr(buffer[0]), bufferSize) + if readBytes == 0: + break + let prevLen = result.len + result.setLen(prevLen + readBytes) + copyMem(addr(result[prevLen]), addr(buffer[0]), readBytes) + if readBytes < bufferSize: break - inc r, bufferSize - setLen(result, r+bufferSize) proc peekData*(s: Stream, buffer: pointer, bufLen: int): int = ## low level proc that reads data into an untyped `buffer` of `bufLen` size