Skip to content

Commit 1cee339

Browse files
committed
glibc wrapper only available on recent glibc releases
1 parent dc3b011 commit 1cee339

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-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

0 commit comments

Comments
 (0)