Update to perform cloexec in kernel

This commit is contained in:
Jeremy Soller 2017-04-16 12:54:14 -06:00
parent 58b1e57d22
commit cd5332c973
7 changed files with 41 additions and 7 deletions

2
kernel

@ -1 +1 @@
Subproject commit ea1150cd9b4a06dfbdb32beda634816ec1a93dd4
Subproject commit d036c667a1ad7e104cd48846bf6b90961da8c1fb

@ -1 +1 @@
Subproject commit 6c1f476735e11d84b445dc8e60662f94f96434cc
Subproject commit 032a45c55242aebaa9f6a03fa9d11da881bfcb1f

@ -1 +1 @@
Subproject commit d77d13743df25c673341153c3c0db199f84efa55
Subproject commit 2afa32c5b5e98a6bbf16b323f0ed72e16f2530c3

@ -1 +1 @@
Subproject commit f2bfb0faa19142a34e566f2962544cad1fafb27f
Subproject commit 1991d0bbe3f4e5060b9e6878f449619f45d9f595

2
rust

@ -1 +1 @@
Subproject commit 28a74299778cdad4ea999e4ee8f8c1ef793338bd
Subproject commit 1bc9e5da2367cdeebd86afb4ad1a3d45aae53837

View file

@ -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<usize> {
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<usize> {
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<usize> {
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<usize> {
match cmd {
F_GETFL => Ok(self.flags),
F_SETFL => {
self.flags = arg & ! O_ACCMODE;
Ok(0)
},
_ => Err(Error::new(EINVAL))
}
}
}
fn main(){

@ -1 +1 @@
Subproject commit f418d30dc9c08b9c45b51f335263fd057ca17f33
Subproject commit f0c38fe609d666254ec29f6906603c3a3940ee46