From 605b65487f97d53906ab4f4c7b2591b9ba8fc43e Mon Sep 17 00:00:00 2001 From: data-man Date: Fri, 25 May 2018 06:50:39 +0300 Subject: [PATCH] Fixes #7877 --- lib/pure/streams.nim | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) 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