Skip to content

Commit 78f4ca2

Browse files
committed
glibc wrapper only available on recent glibc releases
1 parent a09ca4f commit 78f4ca2

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

src/unistd.rs

+10-1
Original file line numberDiff line numberDiff line change
@@ -4024,7 +4024,14 @@ pub fn close_range<F: std::os::fd::AsFd>(fdbegin: F, fdlast: F, flags: CloseRang
40244024

40254025
let raw = unsafe {
40264026
Errno::clear();
4027-
libc::close_range(fdbegin.as_fd().as_raw_fd() as u32, fdlast.as_fd().as_raw_fd() as u32, flags.bits() as i32)
4027+
4028+
cfg_if! {
4029+
if #[cfg(all(target_os = "linux", target_env = "gnu"))] {
4030+
libc::syscall(libc::SYS_close_range, fdbegin.as_fd().as_raw_fd() as u32, fdlast.as_fd().as_raw_fd() as u32, flags.bits() as i32)
4031+
} else {
4032+
libc::close_range(fdbegin.as_fd().as_raw_fd() as u32, fdlast.as_fd().as_raw_fd() as u32, flags.bits() as i32)
4033+
}
4034+
}
40284035
};
40294036
if raw == -1 {
40304037
if Errno::last_raw() == 0 {
@@ -4033,6 +4040,8 @@ pub fn close_range<F: std::os::fd::AsFd>(fdbegin: F, fdlast: F, flags: CloseRang
40334040
Err(Errno::last())
40344041
}
40354042
} else {
4043+
#[cfg(all(target_os = "linux", target_env = "gnu", target_pointer_width = "64"))]
4044+
let raw = raw as i32;
40364045
Ok(Some(raw))
40374046
}
40384047

test/test_unistd.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1397,6 +1397,7 @@ fn test_group_from() {
13971397
all(target_os = "linux", target_env = "gnu"),
13981398
target_os = "freebsd"
13991399
))]
1400+
#[cfg_attr(qemu, ignore)]
14001401
fn test_close_range() {
14011402
use tempfile::NamedTempFile;
14021403
const CONTENTS: &[u8] = b"abcdef123456";

0 commit comments

Comments
 (0)