about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2017-01-15 08:01:19 +0000
committerbors <bors@rust-lang.org>2017-01-15 08:01:19 +0000
commitd274e554ad8327d4042ed71c1e3e5fa23d36f414 (patch)
treea7bb31d7f0d576d2d4056e75295f9bbb864206f1 /src/libstd
parent4f0508af90cfe4fac018b1a464ed94a828811600 (diff)
parentb10e06166ef8a71edf5cf1d61a94b6639880eb05 (diff)
downloadrust-d274e554ad8327d4042ed71c1e3e5fa23d36f414.tar.gz
rust-d274e554ad8327d4042ed71c1e3e5fa23d36f414.zip
Auto merge of #39045 - redox-os:process_try_wait, r=brson
Add try_wait to Redox process

This implements Process::try_wait on Redox
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))
+        }
+    }
 }