From 66786f619d1d85d43fde0059b21cc9729d9be32b Mon Sep 17 00:00:00 2001 From: David Carlier <devnexen@gmail.com> Date: Tue, 11 Apr 2023 20:44:26 +0100 Subject: [PATCH] unistd: getdtablesize implementation proposal --- src/header/unistd/mod.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/header/unistd/mod.rs b/src/header/unistd/mod.rs index f68e6175b..2738b7112 100644 --- a/src/header/unistd/mod.rs +++ b/src/header/unistd/mod.rs @@ -5,7 +5,7 @@ use core::{convert::TryFrom, mem, ptr, slice}; use crate::{ c_str::CStr, header::{ - errno, fcntl, limits, stdlib::getenv, sys_ioctl, sys_time, sys_utsname, termios, + errno, fcntl, limits, stdlib::getenv, sys_ioctl, sys_resource, sys_time, sys_utsname, termios, time::timespec, }, platform::{self, types::*, Pal, Sys}, @@ -289,7 +289,16 @@ pub extern "C" fn getcwd(mut buf: *mut c_char, mut size: size_t) -> *mut c_char // #[no_mangle] pub extern "C" fn getdtablesize() -> c_int { - unimplemented!(); + let mut lim = mem::MaybeUninit::<sys_resource::rlimit>::uninit(); + let r = unsafe { sys_resource::getrlimit(sys_resource::RLIMIT_NOFILE as c_int, lim.as_mut_ptr() as *mut sys_resource::rlimit) }; + if r == 0 { + let cur = unsafe { lim.assume_init() }.rlim_cur; + match cur { + c if c < i32::MAX as u64 => c as i32, + _ => i32::MAX + }; + } + -1 } #[no_mangle] -- GitLab