in src/reader.rs [519:559]
fn read_lines<E: Endian, T: GcovReader<E> + Sized>(
fun: &mut GcovFunction,
version: u32,
reader: &mut T,
) -> Result<(), GcovReaderError> {
let block_no = reader.read_u32()? as usize;
let mut must_take = true;
if block_no <= fun.blocks.len() {
let block = &mut fun.blocks[block_no];
let lines = &mut block.lines;
loop {
let line = reader.read_u32()?;
if line != 0 {
if !must_take
|| (version >= 80 && (line < fun.start_line || line > fun.end_line))
{
continue;
}
lines.push(line);
if line > block.line_max {
block.line_max = line;
}
} else {
let filename = reader.read_string()?;
if filename.is_empty() {
break;
}
must_take = filename == fun.file_name;
// some lines in the block can come from an other file
// TODO
}
}
} else {
return Err(GcovReaderError::Str(format!(
"Unexpected block number: {} (in {}).",
block_no, fun.name
)));
}
Ok(())
}