| use crate::fmt; |
| use crate::io; |
| use crate::num::NonZeroI32; |
| use crate::sys::process::process_common::*; |
| use crate::sys::unix::unsupported::*; |
| use core::ffi::NonZero_c_int; |
| |
| use libc::{c_int, pid_t}; |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // Command |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| impl Command { |
| pub fn spawn( |
| &mut self, |
| _default: Stdio, |
| _needs_stdin: bool, |
| ) -> io::Result<(Process, StdioPipes)> { |
| unsupported() |
| } |
| |
| pub fn output(&mut self) -> io::Result<(ExitStatus, Vec<u8>, Vec<u8>)> { |
| unsupported() |
| } |
| |
| pub fn exec(&mut self, _default: Stdio) -> io::Error { |
| unsupported_err() |
| } |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // Processes |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| pub struct Process { |
| _handle: pid_t, |
| } |
| |
| impl Process { |
| pub fn id(&self) -> u32 { |
| 0 |
| } |
| |
| pub fn kill(&mut self) -> io::Result<()> { |
| unsupported() |
| } |
| |
| pub fn wait(&mut self) -> io::Result<ExitStatus> { |
| unsupported() |
| } |
| |
| pub fn try_wait(&mut self) -> io::Result<Option<ExitStatus>> { |
| unsupported() |
| } |
| } |
| |
| mod wait_status; |
| pub use wait_status::ExitStatus; |
| |
| #[derive(PartialEq, Eq, Clone, Copy, Debug)] |
| pub struct ExitStatusError(NonZero_c_int); |
| |
| impl Into<ExitStatus> for ExitStatusError { |
| fn into(self) -> ExitStatus { |
| ExitStatus::from(c_int::from(self.0)) |
| } |
| } |
| |
| impl ExitStatusError { |
| pub fn code(self) -> Option<NonZeroI32> { |
| ExitStatus::from(c_int::from(self.0)).code().map(|st| st.try_into().unwrap()) |
| } |
| } |