(
&self,
dst: &mut dyn Write
)
| 698 | } |
| 699 | |
| 700 | fn write_kcore_dumpit( |
| 701 | &self, |
| 702 | dst: &mut dyn Write |
| 703 | ) -> Result<()> { |
| 704 | let out_data = self.out_header.as_ref().ok_or( |
| 705 | Error::IoError("Object not initialized. Did you call init()?".to_string()))?; |
| 706 | dst.write_all(&out_data[..])?; |
| 707 | |
| 708 | // Writing each of the memory range that is not virtual. |
| 709 | let mut buf = vec![0u8; BLOCK_SIZE]; |
| 710 | let mut rdr = BufReader::new(&self.kcore); |
| 711 | |
| 712 | for range in &self.mem_ranges { |
| 713 | let mut off = 0; |
| 714 | if range.is_virtual { |
| 715 | continue; |
| 716 | } |
| 717 | |
| 718 | info!("Writing 0x{:x}-0x{:x} physical block...", |
| 719 | range.start_phys_addr, range.end_phys_addr); |
| 720 | |
| 721 | let bar = ProgressBar::new(range.memsz); |
| 722 | rdr.seek(SeekFrom::Start(range.kcore_file_off))?; |
| 723 | |
| 724 | while off < range.memsz { |
| 725 | let bytes_left = (range.memsz - off) as usize; |
| 726 | let bytes_to_read = cmp::min(bytes_left, BLOCK_SIZE); |
| 727 | |
| 728 | rdr.read_exact(&mut buf[0..bytes_to_read])?; |
| 729 | dst.write_all(&buf[0..bytes_to_read])?; |
| 730 | |
| 731 | off += bytes_to_read as u64; |
| 732 | bar.inc(bytes_to_read as u64); |
| 733 | } |
| 734 | } |
| 735 | |
| 736 | Ok(()) |
| 737 | } |
| 738 | |
| 739 | fn write_to_archive( |
| 740 | &self, |
no outgoing calls
no test coverage detected