From 8c2794533dd69b4c77182385ae080130d8da35a1 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Wed, 11 Mar 2026 00:05:19 +0100 Subject: [PATCH] block: qcow: impl AsFd for RawFile and QcowRawFile Implement AsFd for both RawFile and QcowRawFile by delegating to the inner File handle. This enables safe fd borrowing through the standard AsFd trait, which is a prerequisite for replacing unsafe libc::dup calls with BorrowedFd::try_clone_to_owned(). Suggested-by: Rob Bradford Signed-off-by: Anatol Belski --- block/src/qcow/qcow_raw_file.rs | 8 +++++++- block/src/qcow/raw_file.rs | 7 +++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/block/src/qcow/qcow_raw_file.rs b/block/src/qcow/qcow_raw_file.rs index 92a569d34..232f6b5a5 100644 --- a/block/src/qcow/qcow_raw_file.rs +++ b/block/src/qcow/qcow_raw_file.rs @@ -7,7 +7,7 @@ use std::fmt::Debug; use std::io::{self, BufWriter, Read, Seek, SeekFrom, Write}; use std::mem::size_of; -use std::os::fd::{AsRawFd, RawFd}; +use std::os::fd::{AsFd, AsRawFd, BorrowedFd, RawFd}; use byteorder::{BigEndian, ReadBytesExt, WriteBytesExt}; use vmm_sys_util::write_zeroes::WriteZeroes; @@ -361,3 +361,9 @@ impl AsRawFd for QcowRawFile { self.file.as_raw_fd() } } + +impl AsFd for QcowRawFile { + fn as_fd(&self) -> BorrowedFd<'_> { + self.file.as_fd() + } +} diff --git a/block/src/qcow/raw_file.rs b/block/src/qcow/raw_file.rs index eda7751c3..06ec4975f 100644 --- a/block/src/qcow/raw_file.rs +++ b/block/src/qcow/raw_file.rs @@ -11,6 +11,7 @@ use std::alloc::{Layout, alloc_zeroed, dealloc}; use std::fs::{File, Metadata}; use std::io::{self, Read, Seek, SeekFrom, Write}; +use std::os::fd::{AsFd, BorrowedFd}; use std::os::unix::io::{AsRawFd, RawFd}; use std::slice; @@ -397,3 +398,9 @@ impl AsRawFd for RawFile { self.file.as_raw_fd() } } + +impl AsFd for RawFile { + fn as_fd(&self) -> BorrowedFd<'_> { + self.file.as_fd() + } +}