blob: 57fe08191aa009b67ecb0d9d4ee77fd9765b4e31 [file] [log] [blame]
use std::os::fd::OwnedFd;
use tokio::process::Command;
use tokio_crate as tokio;
use crate::{
map_fds, preserve_fds, validate_child_fds, CommandFdExt, FdMapping, FdMappingCollision,
};
impl CommandFdExt for Command {
fn fd_mappings(
&mut self,
mut mappings: Vec<FdMapping>,
) -> Result<&mut Self, FdMappingCollision> {
let child_fds = validate_child_fds(&mappings)?;
unsafe {
self.pre_exec(move || map_fds(&mut mappings, &child_fds));
}
Ok(self)
}
fn preserved_fds(&mut self, fds: Vec<OwnedFd>) -> &mut Self {
unsafe {
self.pre_exec(move || preserve_fds(&fds));
}
self
}
}