From f9b2f9565cb87efd16cb40a998a50f7c6780c6e8 Mon Sep 17 00:00:00 2001 From: Archs Date: Sun, 1 Mar 2015 00:33:40 +0800 Subject: [PATCH] streams.ssWriteData: calling setLen only when new data truely increases the underlying string buffer --- lib/pure/streams.nim | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/pure/streams.nim b/lib/pure/streams.nim index 67c80e5926..1ba0fb9aaf 100644 --- a/lib/pure/streams.nim +++ b/lib/pure/streams.nim @@ -224,10 +224,12 @@ proc ssReadData(s: Stream, buffer: pointer, bufLen: int): int = proc ssWriteData(s: Stream, buffer: pointer, bufLen: int) = var s = StringStream(s) - if bufLen > 0: + if bufLen <= 0: + return + if s.pos + bufLen > s.data.len(): setLen(s.data, s.data.len + bufLen) - copyMem(addr(s.data[s.pos]), buffer, bufLen) - inc(s.pos, bufLen) + copyMem(addr(s.data[s.pos]), buffer, bufLen) + inc(s.pos, bufLen) proc ssClose(s: Stream) = var s = StringStream(s)