1 use std::os::fd::OwnedFd; 2 use tokio::process::Command; 3 use tokio_crate as tokio; 4 5 use crate::{ 6 map_fds, preserve_fds, validate_child_fds, CommandFdExt, FdMapping, FdMappingCollision, 7 }; 8 9 impl CommandFdExt for Command { fd_mappings( &mut self, mut mappings: Vec<FdMapping>, ) -> Result<&mut Self, FdMappingCollision>10 fn fd_mappings( 11 &mut self, 12 mut mappings: Vec<FdMapping>, 13 ) -> Result<&mut Self, FdMappingCollision> { 14 let child_fds = validate_child_fds(&mappings)?; 15 16 unsafe { 17 self.pre_exec(move || map_fds(&mut mappings, &child_fds)); 18 } 19 20 Ok(self) 21 } 22 preserved_fds(&mut self, fds: Vec<OwnedFd>) -> &mut Self23 fn preserved_fds(&mut self, fds: Vec<OwnedFd>) -> &mut Self { 24 unsafe { 25 self.pre_exec(move || preserve_fds(&fds)); 26 } 27 28 self 29 } 30 } 31