From 3f9d8db5b731c5fcd9d9de74ee08341318d9b8c3 Mon Sep 17 00:00:00 2001 From: Johannes Altmanninger Date: Sat, 25 Oct 2025 18:08:07 +0200 Subject: [PATCH] builtin ulimit: extract function --- src/builtins/ulimit.rs | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/builtins/ulimit.rs b/src/builtins/ulimit.rs index 091f93f08..ef7c776bf 100644 --- a/src/builtins/ulimit.rs +++ b/src/builtins/ulimit.rs @@ -2,6 +2,7 @@ use libc::{RLIM_INFINITY, c_uint, rlim_t}; use nix::errno::Errno; +use nix::sys::resource::Resource as ResourceEnum; use once_cell::sync::Lazy; use crate::fallback::{fish_wcswidth, wcscasecmp}; @@ -85,22 +86,23 @@ macro_rules! define_on { define_on!(NTHR, RLIMIT_NTHR; "netbsd"); } +fn convert_resource(resource: c_uint) -> ResourceEnum { + let resource: i32 = resource.try_into().unwrap(); + use std::mem::{size_of, transmute}; + // Resource is #[repr(i32)] so this is ok + const _: () = assert!(size_of::() == size_of::()); + unsafe { transmute(resource) } +} + /// Calls getrlimit. fn getrlimit(resource: c_uint) -> Option<(rlim_t, rlim_t)> { - let resource: i32 = resource.try_into().unwrap(); - - // Resource is #[repr(i32)] so this is ok - let resource = unsafe { std::mem::transmute::(resource) }; - nix::sys::resource::getrlimit(resource) + nix::sys::resource::getrlimit(convert_resource(resource)) .map_err(|_| perror("getrlimit")) .ok() } fn setrlimit(resource: c_uint, rlim_cur: rlim_t, rlim_max: rlim_t) -> Result<(), Errno> { - let resource: i32 = resource.try_into().unwrap(); - // Resource is #[repr(i32)] so this is ok - let resource = unsafe { std::mem::transmute::(resource) }; - nix::sys::resource::setrlimit(resource, rlim_cur, rlim_max) + nix::sys::resource::setrlimit(convert_resource(resource), rlim_cur, rlim_max) } /// Print the value of the specified resource limit.