Stronger guarantees for write block sizes

Certain output streams such as compressors and ciphers may require
a certain block size on each write.
This commit is contained in:
Zahary Karadjov 2019-07-31 01:50:05 +03:00
commit 6250518b6f
No known key found for this signature in database
GPG key ID: C8936F8A3073D609

View file

@ -223,16 +223,17 @@ proc writeDataAsPages(s: OutputStreamVar, data: ptr byte, dataLen: int) =
data = data data = data
dataLen = dataLen dataLen = dataLen
if dataLen < s.maxWriteSize: if dataLen > s.pageSize:
s.vtable.writePage(s, makeOpenArray(data, dataLen)) if dataLen < s.maxWriteSize:
s.endPos += dataLen s.vtable.writePage(s, makeOpenArray(data, dataLen))
return s.endPos += dataLen
return
while dataLen > s.pageSize: while dataLen > s.pageSize:
s.vtable.writePage(s, makeOpenArray(data, s.pageSize)) s.vtable.writePage(s, makeOpenArray(data, s.pageSize))
data = shift(data, s.pageSize) data = shift(data, s.pageSize)
dec dataLen, s.pageSize dec dataLen, s.pageSize
s.endPos += s.pageSize s.endPos += s.pageSize
copyMem(s.cursor.head, data, dataLen) copyMem(s.cursor.head, data, dataLen)
s.cursor.head = shift(s.cursor.head, dataLen) s.cursor.head = shift(s.cursor.head, dataLen)