From 79e81d46e22e7f91cfe5b830173d702aec5296f7 Mon Sep 17 00:00:00 2001 From: oech3 <79379754+oech3@users.noreply.github.com> Date: Sat, 16 May 2026 03:26:52 +0900 Subject: [PATCH] wc: remove splice_exact --- src/uu/wc/src/count_fast.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/uu/wc/src/count_fast.rs b/src/uu/wc/src/count_fast.rs index bc7e72a4efa..4487b98a780 100644 --- a/src/uu/wc/src/count_fast.rs +++ b/src/uu/wc/src/count_fast.rs @@ -27,7 +27,7 @@ const FILE_ATTRIBUTE_NORMAL: u32 = 128; #[cfg(any(target_os = "linux", target_os = "android"))] use libc::S_IFIFO; #[cfg(any(target_os = "linux", target_os = "android"))] -use uucore::pipes::{MAX_ROOTLESS_PIPE_SIZE, pipe, splice, splice_exact}; +use uucore::pipes::{MAX_ROOTLESS_PIPE_SIZE, pipe, splice}; const BUF_SIZE: usize = 64 * 1024; @@ -59,9 +59,12 @@ fn count_bytes_using_splice(fd: &impl AsFd) -> Result { loop { match splice(fd, &pipe_wr, MAX_ROOTLESS_PIPE_SIZE) { Ok(0) => return Ok(byte_count), - Ok(res) => { - byte_count += res; - splice_exact(&pipe_rd, &null_file, res).map_err(|_| byte_count)?; + Ok(mut discard) => { + byte_count += discard; + while discard > 0 { + // pipe to null is not blocked. So this loop is just once at most cases... + discard -= splice(&pipe_rd, &null_file, discard).map_err(|_| byte_count)?; + } } Err(_) => return Err(byte_count), }