From cd5332c9735f0642f6ed04a7ad260bec1a7c3cd1 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Sun, 16 Apr 2017 12:54:14 -0600 Subject: [PATCH] Update to perform cloexec in kernel --- kernel | 2 +- programs/init | 2 +- programs/ion | 2 +- programs/orbutils | 2 +- rust | 2 +- schemes/ptyd/src/main.rs | 36 +++++++++++++++++++++++++++++++++++- schemes/redoxfs | 2 +- 7 files changed, 41 insertions(+), 7 deletions(-) diff --git a/kernel b/kernel index ea1150c..d036c66 160000 --- a/kernel +++ b/kernel @@ -1 +1 @@ -Subproject commit ea1150cd9b4a06dfbdb32beda634816ec1a93dd4 +Subproject commit d036c667a1ad7e104cd48846bf6b90961da8c1fb diff --git a/programs/init b/programs/init index 6c1f476..032a45c 160000 --- a/programs/init +++ b/programs/init @@ -1 +1 @@ -Subproject commit 6c1f476735e11d84b445dc8e60662f94f96434cc +Subproject commit 032a45c55242aebaa9f6a03fa9d11da881bfcb1f diff --git a/programs/ion b/programs/ion index d77d137..2afa32c 160000 --- a/programs/ion +++ b/programs/ion @@ -1 +1 @@ -Subproject commit d77d13743df25c673341153c3c0db199f84efa55 +Subproject commit 2afa32c5b5e98a6bbf16b323f0ed72e16f2530c3 diff --git a/programs/orbutils b/programs/orbutils index f2bfb0f..1991d0b 160000 --- a/programs/orbutils +++ b/programs/orbutils @@ -1 +1 @@ -Subproject commit f2bfb0faa19142a34e566f2962544cad1fafb27f +Subproject commit 1991d0bbe3f4e5060b9e6878f449619f45d9f595 diff --git a/rust b/rust index 28a7429..1bc9e5d 160000 --- a/rust +++ b/rust @@ -1 +1 @@ -Subproject commit 28a74299778cdad4ea999e4ee8f8c1ef793338bd +Subproject commit 1bc9e5da2367cdeebd86afb4ad1a3d45aae53837 diff --git a/schemes/ptyd/src/main.rs b/schemes/ptyd/src/main.rs index d03bd4f..2a982fa 100644 --- a/schemes/ptyd/src/main.rs +++ b/schemes/ptyd/src/main.rs @@ -11,7 +11,7 @@ use std::str; use syscall::data::Packet; use syscall::error::{Error, Result, EBADF, EINVAL, ENOENT, EPIPE, EWOULDBLOCK}; -use syscall::flag::O_NONBLOCK; +use syscall::flag::{F_GETFL, F_SETFL, O_ACCMODE, O_NONBLOCK}; use syscall::scheme::SchemeMut; pub struct PtyScheme { @@ -102,6 +102,18 @@ impl SchemeMut for PtyScheme { Err(Error::new(EBADF)) } + fn fcntl(&mut self, id: usize, cmd: usize, arg: usize) -> Result { + if let Some(pipe) = self.ptys.0.get_mut(&id) { + return pipe.fcntl(cmd, arg); + } + + if let Some(pipe) = self.ptys.1.get_mut(&id) { + return pipe.fcntl(cmd, arg); + } + + Err(Error::new(EBADF)) + } + fn fevent(&mut self, id: usize, _flags: usize) -> Result { if self.ptys.0.contains_key(&id) || self.ptys.1.contains_key(&id) { Ok(id) @@ -203,6 +215,17 @@ impl PtyMaster { Ok(i) } + + fn fcntl(&mut self, cmd: usize, arg: usize) -> Result { + match cmd { + F_GETFL => Ok(self.flags), + F_SETFL => { + self.flags = arg & ! O_ACCMODE; + Ok(0) + }, + _ => Err(Error::new(EINVAL)) + } + } } /// Read side of a pipe @@ -286,6 +309,17 @@ impl PtySlave { Err(Error::new(EPIPE)) } } + + fn fcntl(&mut self, cmd: usize, arg: usize) -> Result { + match cmd { + F_GETFL => Ok(self.flags), + F_SETFL => { + self.flags = arg & ! O_ACCMODE; + Ok(0) + }, + _ => Err(Error::new(EINVAL)) + } + } } fn main(){ diff --git a/schemes/redoxfs b/schemes/redoxfs index f418d30..f0c38fe 160000 --- a/schemes/redoxfs +++ b/schemes/redoxfs @@ -1 +1 @@ -Subproject commit f418d30dc9c08b9c45b51f335263fd057ca17f33 +Subproject commit f0c38fe609d666254ec29f6906603c3a3940ee46