in src/blockio.rs [112:131]
fn flush_buffer(&mut self) -> Result<(), io::Error> {
if self.pos == 0 {
return Ok(());
}
self.writer.write_u32::<LittleEndian>(self.pos as u32)?;
self.writer.write_u32::<LittleEndian>(!(self.pos as u32))?;
let slice = &self.buffer[..self.pos];
let mut digest = crc32::Digest::new(crc32::IEEE);
digest.write(slice);
let crc = digest.sum32();
self.writer.write_u32::<LittleEndian>(crc)?;
self.writer.write_all(slice)?;
self.pos = 0;
Ok(())
}