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

Function decompress_cluster

block/src/qcow_common.rs:61–74  ·  view source on GitHub ↗

Decompress a full QCOW2 cluster from compressed data. Returns a `cluster_size` byte buffer with the decompressed cluster content. Fails if the decoder does not produce exactly `cluster_size` bytes.

(
    compressed: &[u8],
    cluster_size: usize,
    decoder: &dyn Decoder,
)

Source from the content-addressed store, hash-verified

59/// content. Fails if the decoder does not produce exactly `cluster_size`
60/// bytes.
61pub fn decompress_cluster(
62 compressed: &[u8],
63 cluster_size: usize,
64 decoder: &dyn Decoder,
65) -> io::Result<Vec<u8>> {
66 let mut decompressed = vec![0u8; cluster_size];
67 let n = decoder
68 .decode(compressed, &mut decompressed)
69 .map_err(|_| io::Error::from_raw_os_error(libc::EIO))?;
70 if n != cluster_size {
71 return Err(io::Error::from_raw_os_error(libc::EIO));
72 }
73 Ok(decompressed)
74}
75
76/// Write all bytes to fd at offset, looping on short writes.
77pub fn pwrite_all(fd: RawFd, buf: &[u8], offset: u64) -> io::Result<()> {

Callers 6

scatter_read_syncMethod · 0.85
read_vectoredMethod · 0.85
test_decompress_clusterFunction · 0.85
read_at_innerMethod · 0.85
read_clustersMethod · 0.85

Calls 1

decodeMethod · 0.80

Tested by 2

test_decompress_clusterFunction · 0.68