summary refs log tree commit diff
path: root/qcow/src/qcow_raw_file.rs
diff options
context:
space:
mode:
Diffstat (limited to 'qcow/src/qcow_raw_file.rs')
-rw-r--r--qcow/src/qcow_raw_file.rs9
1 files changed, 9 insertions, 0 deletions
diff --git a/qcow/src/qcow_raw_file.rs b/qcow/src/qcow_raw_file.rs
index 456b986..a900081 100644
--- a/qcow/src/qcow_raw_file.rs
+++ b/qcow/src/qcow_raw_file.rs
@@ -7,6 +7,7 @@ use std::io::{self, BufWriter, Seek, SeekFrom};
 use std::mem::size_of;
 
 use byteorder::{BigEndian, ReadBytesExt, WriteBytesExt};
+use sys_util::WriteZeroes;
 
 /// A qcow file. Allows reading/writing clusters and appending clusters.
 #[derive(Debug)]
@@ -133,4 +134,12 @@ impl QcowRawFile {
     pub fn cluster_offset(&self, address: u64) -> u64 {
         address & self.cluster_mask
     }
+
+    /// Zeros out a cluster in the file.
+    pub fn zero_cluster(&mut self, address: u64) -> io::Result<()> {
+        let cluster_size = self.cluster_size as usize;
+        self.file.seek(SeekFrom::Start(address))?;
+        self.file.write_zeroes(cluster_size)?;
+        Ok(())
+    }
 }