diff options
author | data-man <datamanrb@gmail.com> | 2018-05-25 06:50:39 +0300 |
---|---|---|
committer | data-man <datamanrb@gmail.com> | 2018-05-25 06:58:07 +0300 |
commit | 605b65487f97d53906ab4f4c7b2591b9ba8fc43e (patch) | |
tree | 74254c441d1dfac11dbf88d97ffa6b1f834a7096 /lib | |
parent | e206a8d95240e766474d601f529fef1c0026f80f (diff) | |
download | Nim-605b65487f97d53906ab4f4c7b2591b9ba8fc43e.tar.gz |
Fixes #7877
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pure/streams.nim | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/lib/pure/streams.nim b/lib/pure/streams.nim index 68922f730..f655a5cd7 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) + 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: - setLen(result, r+readBytes) 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 |