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
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)