From 4930d93090ff8ab816159819960b83e88b1f156c Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Mon, 9 Mar 2026 23:19:50 +0100 Subject: [PATCH] block: qcow: Migrate convert_reader() to BlockResult Switch convert_reader() to BlockResult, preserving the original qcow::Error variants as the BlockError source. The inner convert_reader_writer() call now propagates naturally. Callers get map_err bridges where they still return qcow::Error. Signed-off-by: Anatol Belski --- block/src/qcow/mod.rs | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/block/src/qcow/mod.rs b/block/src/qcow/mod.rs index b00523da8..974e6ec41 100644 --- a/block/src/qcow/mod.rs +++ b/block/src/qcow/mod.rs @@ -2100,21 +2100,27 @@ where Ok(()) } -fn convert_reader(reader: &mut R, dst_file: RawFile, dst_type: ImageType) -> Result<()> +fn convert_reader(reader: &mut R, dst_file: RawFile, dst_type: ImageType) -> BlockResult<()> where R: Read + Seek + SeekHole, { - let src_size = reader.seek(SeekFrom::End(0)).map_err(Error::SeekingFile)?; - reader.rewind().map_err(Error::SeekingFile)?; + let src_size = reader + .seek(SeekFrom::End(0)) + .map_err(|e| BlockError::new(BlockErrorKind::Io, Error::SeekingFile(e)))?; + reader + .rewind() + .map_err(|e| BlockError::new(BlockErrorKind::Io, Error::SeekingFile(e)))?; // Ensure the destination file is empty before writing to it. - dst_file.set_len(0).map_err(Error::SettingFileSize)?; + dst_file + .set_len(0) + .map_err(|e| BlockError::new(BlockErrorKind::Io, Error::SettingFileSize(e)))?; match dst_type { ImageType::Qcow2 => { - let mut dst_writer = QcowFile::new(dst_file, 3, src_size, true)?; + let mut dst_writer = QcowFile::new(dst_file, 3, src_size, true) + .map_err(|e| BlockError::new(BlockErrorKind::Io, e))?; convert_reader_writer(reader, &mut dst_writer, src_size) - .map_err(|e| Error::WritingData(io::Error::other(e))) } ImageType::Raw => { let mut dst_writer = dst_file; @@ -2122,9 +2128,8 @@ where // of the desired size. dst_writer .set_len(src_size) - .map_err(Error::SettingFileSize)?; + .map_err(|e| BlockError::new(BlockErrorKind::Io, Error::SettingFileSize(e)))?; convert_reader_writer(reader, &mut dst_writer, src_size) - .map_err(|e| Error::WritingData(io::Error::other(e))) } } } @@ -2144,11 +2149,13 @@ pub fn convert( let mut src_reader = QcowFile::from_with_nesting_depth(src_file, src_max_nesting_depth, true)?; convert_reader(&mut src_reader, dst_file, dst_type) + .map_err(|e| Error::ReadingData(io::Error::other(e))) } ImageType::Raw => { // src_file is a raw file. let mut src_reader = src_file; convert_reader(&mut src_reader, dst_file, dst_type) + .map_err(|e| Error::ReadingData(io::Error::other(e))) } } }