about summary refs log tree commit diff
path: root/src/libstd/sys
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstd/sys')
-rw-r--r--src/libstd/sys/redox/fd.rs16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/libstd/sys/redox/fd.rs b/src/libstd/sys/redox/fd.rs
index 786d7676612..47d2280fe05 100644
--- a/src/libstd/sys/redox/fd.rs
+++ b/src/libstd/sys/redox/fd.rs
@@ -49,13 +49,19 @@ impl FileDesc {
     }
 
     pub fn set_cloexec(&self) -> io::Result<()> {
-        ::sys_common::util::dumb_print(format_args!("{}: set cloexec\n", self.fd));
-        unimplemented!();
+        let mut flags = cvt(libc::fcntl(self.fd, libc::F_GETFL, 0))?;
+        flags |= libc::O_CLOEXEC;
+        cvt(libc::fcntl(self.fd, libc::F_SETFL, flags)).and(Ok(()))
     }
 
-    pub fn set_nonblocking(&self, _nonblocking: bool) -> io::Result<()> {
-        ::sys_common::util::dumb_print(format_args!("{}: set nonblocking\n", self.fd));
-        unimplemented!();
+    pub fn set_nonblocking(&self, nonblocking: bool) -> io::Result<()> {
+        let mut flags = cvt(libc::fcntl(self.fd, libc::F_GETFL, 0))?;
+        if nonblocking {
+            flags |= libc::O_NONBLOCK;
+        } else {
+            flags &= !libc::O_NONBLOCK;
+        }
+        cvt(libc::fcntl(self.fd, libc::F_SETFL, flags)).and(Ok(()))
     }
 
     pub fn duplicate(&self) -> io::Result<FileDesc> {