about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorJeremy Soller <jackpot51@gmail.com>2017-01-13 15:41:50 -0700
committerJeremy Soller <jackpot51@gmail.com>2017-01-13 15:41:50 -0700
commitb10e06166ef8a71edf5cf1d61a94b6639880eb05 (patch)
tree153a51dc815feb4fa1312e5043dfb25312a2fd1a /src/libstd
parent8780962828858c5b858b847430514505497a2b5c (diff)
downloadrust-b10e06166ef8a71edf5cf1d61a94b6639880eb05.tar.gz
rust-b10e06166ef8a71edf5cf1d61a94b6639880eb05.zip
Add try_wait to Redox process
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/sys/redox/process.rs14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/libstd/sys/redox/process.rs b/src/libstd/sys/redox/process.rs
index 849f51013e6..50dcd44b42e 100644
--- a/src/libstd/sys/redox/process.rs
+++ b/src/libstd/sys/redox/process.rs
@@ -501,4 +501,18 @@ impl Process {
         self.status = Some(ExitStatus(status as i32));
         Ok(ExitStatus(status as i32))
     }
+
+    pub fn try_wait(&mut self) -> io::Result<ExitStatus> {
+        if let Some(status) = self.status {
+            return Ok(status)
+        }
+        let mut status = 0;
+        let pid = cvt(syscall::waitpid(self.pid, &mut status, syscall::WNOHANG))?;
+        if pid == 0 {
+            Err(io::Error::from_raw_os_error(syscall::EWOULDBLOCK))
+        } else {
+            self.status = Some(ExitStatus(status as i32));
+            Ok(ExitStatus(status as i32))
+        }
+    }
 }