use crate::raw::{btrfs_ioc_clone_range, btrfs_ioctl_clone_range_args};
use std::os::{fd::AsRawFd, unix::io::BorrowedFd};
pub fn clone_range(
src: BorrowedFd<'_>,
src_offset: u64,
length: u64,
dst: BorrowedFd<'_>,
dst_offset: u64,
) -> nix::Result<()> {
let mut args = btrfs_ioctl_clone_range_args {
src_fd: i64::from(src.as_raw_fd()),
src_offset,
src_length: length,
dest_offset: dst_offset,
};
unsafe { btrfs_ioc_clone_range(dst.as_raw_fd(), &raw mut args) }?;
Ok(())
}
#[cfg(test)]
mod tests {
use super::*;
use std::mem::size_of;
#[test]
fn args_struct_size_matches_kernel() {
assert_eq!(size_of::<btrfs_ioctl_clone_range_args>(), 32);
}
}