Lines Matching +full:use +full:- +full:libc
2 use crate::errno::Errno;
3 use crate::sys::signal::Signal;
4 use crate::unistd::Pid;
5 use crate::Result;
6 use cfg_if::cfg_if;
7 use libc::{self, c_int};
8 use std::convert::TryFrom;
13 use std::os::unix::io::RawFd;
84 /// Note that there are two Linux-specific enum variants, `PtraceEvent`
105 /// currently-defined events use `SIGTRAP` as the signal; the third
109 /// [`ptrace`(2)]: https://man7.org/linux/man-pages/man2/ptrace.2.html
117 /// [`ptrace`(2)]: https://man7.org/linux/man-pages/man2/ptrace.2.html
135 pub fn pid(&self) -> Option<Pid> { in pid()
136 use self::WaitStatus::*; in pid()
148 fn exited(status: i32) -> bool { in exited()
149 libc::WIFEXITED(status) in exited()
152 fn exit_status(status: i32) -> i32 { in exit_status()
153 libc::WEXITSTATUS(status) in exit_status()
156 fn signaled(status: i32) -> bool { in signaled()
157 libc::WIFSIGNALED(status) in signaled()
160 fn term_signal(status: i32) -> Result<Signal> { in term_signal()
161 Signal::try_from(libc::WTERMSIG(status)) in term_signal()
164 fn dumped_core(status: i32) -> bool { in dumped_core()
165 libc::WCOREDUMP(status) in dumped_core()
168 fn stopped(status: i32) -> bool { in stopped()
169 libc::WIFSTOPPED(status) in stopped()
172 fn stop_signal(status: i32) -> Result<Signal> { in stop_signal()
173 Signal::try_from(libc::WSTOPSIG(status)) in stop_signal()
177 fn syscall_stop(status: i32) -> bool { in syscall_stop()
182 libc::WSTOPSIG(status) == libc::SIGTRAP | 0x80 in syscall_stop()
186 fn stop_additional(status: i32) -> c_int { in stop_additional()
190 fn continued(status: i32) -> bool { in continued()
191 libc::WIFCONTINUED(status) in continued()
203 /// Convert a `wstatus` obtained from `libc::waitpid` into a `WaitStatus`:
206 /// use nix::sys::wait::WaitStatus;
207 /// use nix::sys::signal::Signal;
212 pub fn from_raw(pid: Pid, status: i32) -> Result<WaitStatus> { in from_raw()
220 fn decode_stopped(pid: Pid, status: i32) -> Result<WaitStatus> { in from_raw()
232 fn decode_stopped(pid: Pid, status: i32) -> Result<WaitStatus> { in from_raw()
261 unsafe fn from_siginfo(siginfo: &libc::siginfo_t) -> Result<WaitStatus> { in from_siginfo()
267 assert_eq!(siginfo.si_signo, libc::SIGCHLD); in from_siginfo()
273 libc::CLD_EXITED => WaitStatus::Exited(pid, si_status), in from_siginfo()
274 libc::CLD_KILLED | libc::CLD_DUMPED => WaitStatus::Signaled( in from_siginfo()
277 siginfo.si_code == libc::CLD_DUMPED, in from_siginfo()
279 libc::CLD_STOPPED => { in from_siginfo()
282 libc::CLD_CONTINUED => WaitStatus::Continued(pid), in from_siginfo()
284 libc::CLD_TRAPPED => { in from_siginfo()
285 if si_status == libc::SIGTRAP | 0x80 { in from_siginfo()
308 ) -> Result<WaitStatus> { in waitpid()
309 use self::WaitStatus::*; in waitpid()
319 libc::waitpid( in waitpid()
320 pid.into().unwrap_or_else(|| Pid::from_raw(-1)).into(), in waitpid()
335 pub fn wait() -> Result<WaitStatus> { in wait()
370 pub fn waitid(id: Id, flags: WaitPidFlag) -> Result<WaitStatus> { in waitid()
372 Id::All => (libc::P_ALL, 0), in waitid()
373 Id::Pid(pid) => (libc::P_PID, pid.as_raw() as libc::id_t), in waitid()
374 Id::PGid(pid) => (libc::P_PGID, pid.as_raw() as libc::id_t), in waitid()
376 Id::PIDFd(fd) => (libc::P_PIDFD, fd as libc::id_t), in waitid()
382 let mut siginfo: libc::siginfo_t = std::mem::zeroed(); in waitid()
383 Errno::result(libc::waitid(idtype, idval, &mut siginfo, flags.bits()))?; in waitid()