Skip to content

Commit 60e0cf2

Browse files
committed
Change getdtablesize() to sysconf(_SC_OPEN_MAX) only for aarch64-android
1 parent aae026d commit 60e0cf2

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

src/liblibc/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4827,6 +4827,7 @@ pub mod funcs {
48274827
mibp: *mut c_int,
48284828
sizep: *mut size_t)
48294829
-> c_int;
4830+
pub fn getdtablesize() -> c_int;
48304831
pub fn madvise(addr: *mut c_void, len: size_t, advice: c_int)
48314832
-> c_int;
48324833
pub fn mincore(addr: *mut c_void, len: size_t, vec: *mut c_uchar)
@@ -4841,6 +4842,8 @@ pub mod funcs {
48414842
use types::os::arch::c95::{c_uchar, c_int, size_t};
48424843

48434844
extern {
4845+
#[cfg(not(all(target_os = "android", target_arch = "aarch64")))]
4846+
pub fn getdtablesize() -> c_int;
48444847
pub fn ioctl(d: c_int, request: c_int, ...) -> c_int;
48454848
pub fn madvise(addr: *mut c_void, len: size_t, advice: c_int)
48464849
-> c_int;

src/libstd/sys/unix/process.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,14 @@ impl Process {
8282
extern { static mut environ: *const c_void; }
8383
environ = envp;
8484
}
85+
#[cfg(all(target_os = "android", target_arch = "aarch64"))]
86+
unsafe fn getdtablesize() -> c_int {
87+
libc::sysconf(libc::consts::os::sysconf::_SC_OPEN_MAX) as c_int
88+
}
89+
#[cfg(not(all(target_os = "android", target_arch = "aarch64")))]
90+
unsafe fn getdtablesize() -> c_int {
91+
libc::funcs::bsd44::getdtablesize()
92+
}
8593

8694
unsafe fn set_cloexec(fd: c_int) {
8795
let ret = c::ioctl(fd, c::FIOCLEX);
@@ -223,8 +231,7 @@ impl Process {
223231
if !setup(err_fd, libc::STDERR_FILENO) { fail(&mut output) }
224232

225233
// close all other fds
226-
let open_max = libc::sysconf(libc::consts::os::sysconf::_SC_OPEN_MAX);
227-
for fd in (3..open_max).rev() {
234+
for fd in (3..getdtablesize()).rev() {
228235
if fd != output.fd() {
229236
let _ = close(fd as c_int);
230237
}

0 commit comments

Comments
 (0)