Skip to content

Commit 4394d40

Browse files
committed
fcntl: change (vm)splice, tee using AsFd instead.
1 parent 213127b commit 4394d40

File tree

3 files changed

+18
-25
lines changed

3 files changed

+18
-25
lines changed

changelog/2387.changed.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Changed tee, splice and vmsplice RawFd arguments to AsFd.

src/fcntl.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1054,10 +1054,10 @@ pub fn copy_file_range<Fd1: AsFd, Fd2: AsFd>(
10541054
/// # See Also
10551055
/// *[`splice`](https://man7.org/linux/man-pages/man2/splice.2.html)
10561056
#[cfg(linux_android)]
1057-
pub fn splice(
1058-
fd_in: RawFd,
1057+
pub fn splice<Fd1: AsFd, Fd2: AsFd>(
1058+
fd_in: Fd1,
10591059
off_in: Option<&mut libc::loff_t>,
1060-
fd_out: RawFd,
1060+
fd_out: Fd2,
10611061
off_out: Option<&mut libc::loff_t>,
10621062
len: usize,
10631063
flags: SpliceFFlags,
@@ -1070,7 +1070,7 @@ pub fn splice(
10701070
.unwrap_or(ptr::null_mut());
10711071

10721072
let ret = unsafe {
1073-
libc::splice(fd_in, off_in, fd_out, off_out, len, flags.bits())
1073+
libc::splice(fd_in.as_fd().as_raw_fd(), off_in, fd_out.as_fd().as_raw_fd(), off_out, len, flags.bits())
10741074
};
10751075
Errno::result(ret).map(|r| r as usize)
10761076
}
@@ -1080,13 +1080,13 @@ pub fn splice(
10801080
/// # See Also
10811081
/// *[`tee`](https://man7.org/linux/man-pages/man2/tee.2.html)
10821082
#[cfg(linux_android)]
1083-
pub fn tee(
1084-
fd_in: RawFd,
1085-
fd_out: RawFd,
1083+
pub fn tee<Fd1: AsFd, Fd2: AsFd>(
1084+
fd_in: Fd1,
1085+
fd_out: Fd2,
10861086
len: usize,
10871087
flags: SpliceFFlags,
10881088
) -> Result<usize> {
1089-
let ret = unsafe { libc::tee(fd_in, fd_out, len, flags.bits()) };
1089+
let ret = unsafe { libc::tee(fd_in.as_fd().as_raw_fd(), fd_out.as_fd().as_raw_fd(), len, flags.bits()) };
10901090
Errno::result(ret).map(|r| r as usize)
10911091
}
10921092

@@ -1095,14 +1095,14 @@ pub fn tee(
10951095
/// # See Also
10961096
/// *[`vmsplice`](https://man7.org/linux/man-pages/man2/vmsplice.2.html)
10971097
#[cfg(linux_android)]
1098-
pub fn vmsplice(
1099-
fd: RawFd,
1098+
pub fn vmsplice<F: AsFd>(
1099+
fd: F,
11001100
iov: &[std::io::IoSlice<'_>],
11011101
flags: SpliceFFlags,
11021102
) -> Result<usize> {
11031103
let ret = unsafe {
11041104
libc::vmsplice(
1105-
fd,
1105+
fd.as_fd().as_raw_fd(),
11061106
iov.as_ptr().cast(),
11071107
iov.len(),
11081108
flags.bits(),

test/test_fcntl.rs

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -357,15 +357,9 @@ mod linux_android {
357357

358358
let (rd, wr) = pipe().unwrap();
359359
let mut offset: loff_t = 5;
360-
let res = splice(
361-
tmp.as_raw_fd(),
362-
Some(&mut offset),
363-
wr.as_raw_fd(),
364-
None,
365-
2,
366-
SpliceFFlags::empty(),
367-
)
368-
.unwrap();
360+
let res =
361+
splice(tmp, Some(&mut offset), wr, None, 2, SpliceFFlags::empty())
362+
.unwrap();
369363

370364
assert_eq!(2, res);
371365

@@ -381,9 +375,8 @@ mod linux_android {
381375
let (rd2, wr2) = pipe().unwrap();
382376

383377
write(wr1, b"abc").unwrap();
384-
let res =
385-
tee(rd1.as_raw_fd(), wr2.as_raw_fd(), 2, SpliceFFlags::empty())
386-
.unwrap();
378+
let res = tee(rd1.try_clone().unwrap(), wr2, 2, SpliceFFlags::empty())
379+
.unwrap();
387380

388381
assert_eq!(2, res);
389382

@@ -406,8 +399,7 @@ mod linux_android {
406399
let buf2 = b"defghi";
407400
let iovecs = [IoSlice::new(&buf1[0..3]), IoSlice::new(&buf2[0..3])];
408401

409-
let res = vmsplice(wr.as_raw_fd(), &iovecs[..], SpliceFFlags::empty())
410-
.unwrap();
402+
let res = vmsplice(wr, &iovecs[..], SpliceFFlags::empty()).unwrap();
411403

412404
assert_eq!(6, res);
413405

0 commit comments

Comments
 (0)