diff options
author | Archs <sun@archs.tk> | 2015-03-01 00:33:40 +0800 |
---|---|---|
committer | Archs <sun@archs.tk> | 2015-03-01 00:33:40 +0800 |
commit | f9b2f9565cb87efd16cb40a998a50f7c6780c6e8 (patch) | |
tree | 67c7b138494b28e618decddb3065161172911ede /lib | |
parent | 549920a85f426fe7eaedafa68d29e04227997c5e (diff) | |
download | Nim-f9b2f9565cb87efd16cb40a998a50f7c6780c6e8.tar.gz |
streams.ssWriteData: calling setLen only when new data truely increases the underlying string buffer
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pure/streams.nim | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/lib/pure/streams.nim b/lib/pure/streams.nim index 67c80e592..1ba0fb9aa 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) |