| 2086 | |
| 2087 | impl Write for QcowFile { |
| 2088 | fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> { |
| 2089 | let address: u64 = self.current_offset; |
| 2090 | let write_count: usize = self.limit_range_file(address, buf.len()); |
| 2091 | |
| 2092 | let mut nwritten: usize = 0; |
| 2093 | while nwritten < write_count { |
| 2094 | let curr_addr = address + nwritten as u64; |
| 2095 | let offset = self.file_offset_write(curr_addr)?; |
| 2096 | let count = self.limit_range_cluster(curr_addr, write_count - nwritten); |
| 2097 | |
| 2098 | self.raw_file.file_mut().seek(SeekFrom::Start(offset))?; |
| 2099 | let count = self |
| 2100 | .raw_file |
| 2101 | .file_mut() |
| 2102 | .write(&buf[nwritten..(nwritten + count)])?; |
| 2103 | |
| 2104 | nwritten += count; |
| 2105 | } |
| 2106 | self.current_offset += write_count as u64; |
| 2107 | Ok(write_count) |
| 2108 | } |
| 2109 | |
| 2110 | fn flush(&mut self) -> std::io::Result<()> { |
| 2111 | self.sync_caches()?; |