From 6250518b6f1c1a91502c33a41abbdd60f895fc39 Mon Sep 17 00:00:00 2001 From: Zahary Karadjov Date: Wed, 31 Jul 2019 01:50:05 +0300 Subject: [PATCH] Stronger guarantees for write block sizes Certain output streams such as compressors and ciphers may require a certain block size on each write. --- faststreams/output_stream.nim | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/faststreams/output_stream.nim b/faststreams/output_stream.nim index 0c62f15..5d6ac65 100644 --- a/faststreams/output_stream.nim +++ b/faststreams/output_stream.nim @@ -223,16 +223,17 @@ proc writeDataAsPages(s: OutputStreamVar, data: ptr byte, dataLen: int) = data = data dataLen = dataLen - if dataLen < s.maxWriteSize: - s.vtable.writePage(s, makeOpenArray(data, dataLen)) - s.endPos += dataLen - return + if dataLen > s.pageSize: + if dataLen < s.maxWriteSize: + s.vtable.writePage(s, makeOpenArray(data, dataLen)) + s.endPos += dataLen + return - while dataLen > s.pageSize: - s.vtable.writePage(s, makeOpenArray(data, s.pageSize)) - data = shift(data, s.pageSize) - dec dataLen, s.pageSize - s.endPos += s.pageSize + while dataLen > s.pageSize: + s.vtable.writePage(s, makeOpenArray(data, s.pageSize)) + data = shift(data, s.pageSize) + dec dataLen, s.pageSize + s.endPos += s.pageSize copyMem(s.cursor.head, data, dataLen) s.cursor.head = shift(s.cursor.head, dataLen)