Send readable event from fevent
This fixes one problem with openssl on relibc, since relibc correctly respects readable/writable status unlike the newlib implementation which always says it's readable.
This commit is contained in:
+17
-5
@@ -18,7 +18,8 @@ use syscall::data::{Packet, Stat};
|
||||
|
||||
//TODO: Use a CSPRNG, allow write of entropy
|
||||
struct RandScheme {
|
||||
prng: ChaChaRng
|
||||
socket: File,
|
||||
prng: ChaChaRng
|
||||
}
|
||||
|
||||
impl SchemeMut for RandScheme {
|
||||
@@ -66,6 +67,17 @@ impl SchemeMut for RandScheme {
|
||||
Ok(0)
|
||||
}
|
||||
|
||||
fn fevent(&mut self, id: usize, _flags: usize) -> Result<usize> {
|
||||
self.socket.write(&syscall::Packet {
|
||||
a: syscall::SYS_FEVENT,
|
||||
b: id,
|
||||
c: syscall::EVENT_READ,
|
||||
d: 1,
|
||||
..Default::default()
|
||||
})?;
|
||||
Ok(0)
|
||||
}
|
||||
|
||||
fn fcntl(&mut self, _id: usize, _cmd: usize, _arg: usize) -> Result<usize> {
|
||||
Ok(0)
|
||||
}
|
||||
@@ -80,7 +92,7 @@ fn main(){
|
||||
|
||||
// Daemonize
|
||||
if unsafe { syscall::clone(0).unwrap() } == 0 {
|
||||
let mut socket = File::create(":rand").expect("rand: failed to create rand scheme");
|
||||
let socket = File::create(":rand").expect("rand: failed to create rand scheme");
|
||||
|
||||
let mut rng = ChaChaRng::new_unseeded();
|
||||
|
||||
@@ -99,15 +111,15 @@ fn main(){
|
||||
println!("rand: unseeded");
|
||||
}
|
||||
|
||||
let mut scheme = RandScheme{prng: rng};
|
||||
let mut scheme = RandScheme{socket, prng: rng};
|
||||
|
||||
syscall::setrens(0, 0).expect("randd: failed to enter null namespace");
|
||||
|
||||
loop {
|
||||
let mut packet = Packet::default();
|
||||
socket.read(&mut packet).expect("rand: failed to read events from rand scheme");
|
||||
scheme.socket.read(&mut packet).expect("rand: failed to read events from rand scheme");
|
||||
scheme.handle(&mut packet);
|
||||
socket.write(&packet).expect("rand: failed to write responses to rand scheme");
|
||||
scheme.socket.write(&packet).expect("rand: failed to write responses to rand scheme");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user