1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-08-17 13:27:49 +00:00

uucore: use AsFd instead AsRawFw in pipes API

to match changes in the API of nix
This commit is contained in:
Daniel Hofstetter 2024-08-14 16:54:42 +02:00
parent 382c223500
commit 612ae271d3

View file

@ -9,7 +9,7 @@ use std::fs::File;
#[cfg(any(target_os = "linux", target_os = "android"))] #[cfg(any(target_os = "linux", target_os = "android"))]
use std::io::IoSlice; use std::io::IoSlice;
#[cfg(any(target_os = "linux", target_os = "android"))] #[cfg(any(target_os = "linux", target_os = "android"))]
use std::os::unix::io::AsRawFd; use std::os::fd::AsFd;
#[cfg(any(target_os = "linux", target_os = "android"))] #[cfg(any(target_os = "linux", target_os = "android"))]
use nix::fcntl::SpliceFFlags; use nix::fcntl::SpliceFFlags;
@ -35,15 +35,8 @@ pub fn pipe() -> Result<(File, File)> {
/// a [`pipe`] and then from the pipe into your target (with `splice_exact`): /// a [`pipe`] and then from the pipe into your target (with `splice_exact`):
/// this is still very efficient. /// this is still very efficient.
#[cfg(any(target_os = "linux", target_os = "android"))] #[cfg(any(target_os = "linux", target_os = "android"))]
pub fn splice(source: &impl AsRawFd, target: &impl AsRawFd, len: usize) -> Result<usize> { pub fn splice(source: &impl AsFd, target: &impl AsFd, len: usize) -> Result<usize> {
nix::fcntl::splice( nix::fcntl::splice(source, None, target, None, len, SpliceFFlags::empty())
source.as_raw_fd(),
None,
target.as_raw_fd(),
None,
len,
SpliceFFlags::empty(),
)
} }
/// Splice wrapper which fully finishes the write. /// Splice wrapper which fully finishes the write.
@ -52,7 +45,7 @@ pub fn splice(source: &impl AsRawFd, target: &impl AsRawFd, len: usize) -> Resul
/// ///
/// Panics if `source` runs out of data before `len` bytes have been moved. /// Panics if `source` runs out of data before `len` bytes have been moved.
#[cfg(any(target_os = "linux", target_os = "android"))] #[cfg(any(target_os = "linux", target_os = "android"))]
pub fn splice_exact(source: &impl AsRawFd, target: &impl AsRawFd, len: usize) -> Result<()> { pub fn splice_exact(source: &impl AsFd, target: &impl AsFd, len: usize) -> Result<()> {
let mut left = len; let mut left = len;
while left != 0 { while left != 0 {
let written = splice(source, target, left)?; let written = splice(source, target, left)?;
@ -66,10 +59,6 @@ pub fn splice_exact(source: &impl AsRawFd, target: &impl AsRawFd, len: usize) ->
/// ///
/// Returns the number of successfully copied bytes. /// Returns the number of successfully copied bytes.
#[cfg(any(target_os = "linux", target_os = "android"))] #[cfg(any(target_os = "linux", target_os = "android"))]
pub fn vmsplice(target: &impl AsRawFd, bytes: &[u8]) -> Result<usize> { pub fn vmsplice(target: &impl AsFd, bytes: &[u8]) -> Result<usize> {
nix::fcntl::vmsplice( nix::fcntl::vmsplice(target, &[IoSlice::new(bytes)], SpliceFFlags::empty())
target.as_raw_fd(),
&[IoSlice::new(bytes)],
SpliceFFlags::empty(),
)
} }