@@ -398,9 +398,9 @@ pub(crate) fn setuid_thread(uid: crate::ugid::Uid) -> io::Result<()> {
398398#[ cfg( linux_kernel) ]
399399#[ inline]
400400pub ( crate ) fn setresuid_thread (
401- ruid : crate :: ugid:: Uid ,
402- euid : crate :: ugid:: Uid ,
403- suid : crate :: ugid:: Uid ,
401+ ruid : Option < crate :: ugid:: Uid > ,
402+ euid : Option < crate :: ugid:: Uid > ,
403+ suid : Option < crate :: ugid:: Uid > ,
404404) -> io:: Result < ( ) > {
405405 #[ cfg( any( target_arch = "x86" , target_arch = "arm" , target_arch = "sparc" ) ) ]
406406 const SYS : c:: c_long = c:: SYS_setresuid32 as c:: c_long ;
@@ -411,7 +411,13 @@ pub(crate) fn setresuid_thread(
411411 fn setresuid( ruid: c:: uid_t, euid: c:: uid_t, suid: c:: uid_t) via SYS -> c:: c_int
412412 }
413413
414- unsafe { ret ( setresuid ( ruid. as_raw ( ) , euid. as_raw ( ) , suid. as_raw ( ) ) ) }
414+ unsafe {
415+ ret ( setresuid (
416+ ruid. map_or ( -1_i32 as u32 , |x| x. as_raw ( ) ) ,
417+ euid. map_or ( -1_i32 as u32 , |x| x. as_raw ( ) ) ,
418+ suid. map_or ( -1_i32 as u32 , |x| x. as_raw ( ) ) ,
419+ ) )
420+ }
415421}
416422
417423#[ cfg( linux_kernel) ]
@@ -427,9 +433,9 @@ pub(crate) fn setgid_thread(gid: crate::ugid::Gid) -> io::Result<()> {
427433#[ cfg( linux_kernel) ]
428434#[ inline]
429435pub ( crate ) fn setresgid_thread (
430- rgid : crate :: ugid:: Gid ,
431- egid : crate :: ugid:: Gid ,
432- sgid : crate :: ugid:: Gid ,
436+ rgid : Option < crate :: ugid:: Gid > ,
437+ egid : Option < crate :: ugid:: Gid > ,
438+ sgid : Option < crate :: ugid:: Gid > ,
433439) -> io:: Result < ( ) > {
434440 #[ cfg( any( target_arch = "x86" , target_arch = "arm" , target_arch = "sparc" ) ) ]
435441 const SYS : c:: c_long = c:: SYS_setresgid32 as c:: c_long ;
@@ -440,7 +446,13 @@ pub(crate) fn setresgid_thread(
440446 fn setresgid( rgid: c:: gid_t, egid: c:: gid_t, sgid: c:: gid_t) via SYS -> c:: c_int
441447 }
442448
443- unsafe { ret ( setresgid ( rgid. as_raw ( ) , egid. as_raw ( ) , sgid. as_raw ( ) ) ) }
449+ unsafe {
450+ ret ( setresgid (
451+ rgid. map_or ( -1_i32 as u32 , |x| x. as_raw ( ) ) ,
452+ egid. map_or ( -1_i32 as u32 , |x| x. as_raw ( ) ) ,
453+ sgid. map_or ( -1_i32 as u32 , |x| x. as_raw ( ) ) ,
454+ ) )
455+ }
444456}
445457
446458/// # Safety
0 commit comments