#![warn(missing_docs)]
extern crate libc;
extern crate nix;
#[cfg(test)] extern crate rand;
mod caps;
mod namespace;
mod idmap;
mod chroot;
mod ffi_util;
mod std_api;
mod config;
mod error;
mod pipe;
mod child;
mod callbacks;
mod linux;
mod fds;
mod run;
mod status;
mod wait;
mod stdio;
mod debug;
mod zombies;
pub use crate::error::Error;
pub use crate::status::ExitStatus;
pub use crate::stdio::{Stdio, Fd};
pub use crate::pipe::{PipeReader, PipeWriter};
pub use crate::namespace::{Namespace};
pub use crate::idmap::{UidMap, GidMap};
pub use crate::zombies::{reap_zombies, child_events, ChildEvent};
pub use nix::sys::signal::Signal;
pub use crate::debug::{Style, Printer};
pub use crate::caps::{Capability};
use std::ffi::{CString, OsString};
use std::path::PathBuf;
use std::os::unix::io::RawFd;
use std::collections::{HashMap, HashSet};
use std::io;
use crate::pipe::PipeHolder;
use libc::{pid_t};
type BoxError = Box<dyn (::std::error::Error) + Send + Sync + 'static>;
pub struct Command {
filename: CString,
args: Vec<CString>,
environ: Option<HashMap<OsString, OsString>>,
config: config::Config,
fds: HashMap<RawFd, Fd>,
close_fds: Vec<(RawFd, RawFd)>,
chroot_dir: Option<PathBuf>,
pivot_root: Option<(PathBuf, PathBuf, bool)>,
id_map_commands: Option<(PathBuf, PathBuf)>,
pid_env_vars: HashSet<OsString>,
keep_caps: Option<[u32; 2]>,
before_unfreeze: Option<Box<dyn FnMut(u32) -> Result<(), BoxError>>>,
pre_exec: Option<Box<dyn Fn() -> Result<(), io::Error>>>,
}
#[derive(Debug)]
pub struct Child {
pid: pid_t,
status: Option<ExitStatus>,
fds: HashMap<RawFd, PipeHolder>,
pub stdin: Option<PipeWriter>,
pub stdout: Option<PipeReader>,
pub stderr: Option<PipeReader>,
}