• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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