From a0b5dfef2a36a15f76476a9d6bb7184a701d0d3c Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Mon, 14 Nov 2016 12:15:11 -0700 Subject: [PATCH] Add fcntl --- src/libstd/sys/redox/fd.rs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/libstd/sys/redox/fd.rs b/src/libstd/sys/redox/fd.rs index 786d76766121..47d2280fe05f 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 {