MCPcopy Create free account
hub / github.com/cloud-hypervisor/cloud-hypervisor / read

Method read

block/src/qcow/mod.rs:2030–2052  ·  view source on GitHub ↗
(&mut self, buf: &mut [u8])

Source from the content-addressed store, hash-verified

2028
2029impl Read for QcowFile {
2030 fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
2031 let address: u64 = self.current_offset;
2032 let read_count: usize = self.limit_range_file(address, buf.len());
2033
2034 let mut nread: usize = 0;
2035 while nread < read_count {
2036 let curr_addr = address + nread as u64;
2037 let count = self.limit_range_cluster(curr_addr, read_count - nread);
2038
2039 if (self.file_read(curr_addr, count, &mut buf[nread..(nread + count)])?).is_some() {
2040 // Data is successfully read from the cluster
2041 } else if let Some(backing) = self.backing_file.as_mut() {
2042 backing.read_at(curr_addr, &mut buf[nread..(nread + count)])?;
2043 } else {
2044 // Previously unwritten region, return zeros
2045 buf[nread..(nread + count)].fill(0);
2046 }
2047
2048 nread += count;
2049 }
2050 self.current_offset += read_count as u64;
2051 Ok(read_count)
2052 }
2053}
2054
2055impl Seek for QcowFile {

Calls 5

limit_range_fileMethod · 0.80
limit_range_clusterMethod · 0.80
file_readMethod · 0.80
lenMethod · 0.45
read_atMethod · 0.45