in tools/plugins/mboxo_patch.py [0:0]
def _read(self, size, read_method):
# get the next chunk, resetting if necessary
if self.remain != 0:
super().seek(whence=1, offset=-self.remain)
# if size is None or negative, then read returns everything.
# in which case there is no need to wory about matching across reads
limited_read = size and size >= 0
# ensure we get enough to match successfully when refilling
if limited_read and size < FROM_MANGLED_LEN:
size = FROM_MANGLED_LEN
buff = super()._read(size, read_method)
bufflen=len(buff)
# did we get anything new?
if limited_read and bufflen > self.remain:
# is there a potential cross-boundary match?
if buff.endswith(FROMS):
# yes, work out what to keep
# N.B. rindex will fail if it cannot find the LF;
# this should be impossible
self.remain=bufflen - buff.rindex(b'\n')
else:
# don't need to keep anything back
self.remain=0
else:
# EOF
self.remain=0
# we cannot use -0 to mean end of array...
end = bufflen if self.remain == 0 else -self.remain
# exclude the potential split match from the return
return buff[:end].replace(FROM_MANGLED, FROM_UNMANGLED)