Use redox-daemon
This commit is contained in:
+9
-8
@@ -1,30 +1,31 @@
|
||||
extern crate syscall;
|
||||
|
||||
use syscall::data::Packet;
|
||||
use syscall::flag::CloneFlags;
|
||||
use syscall::scheme::Scheme;
|
||||
use std::fs::File;
|
||||
use std::io::{Read, Write};
|
||||
|
||||
use syscall::data::Packet;
|
||||
use syscall::scheme::Scheme;
|
||||
|
||||
use scheme::ZeroScheme;
|
||||
|
||||
mod scheme;
|
||||
|
||||
fn main() {
|
||||
if unsafe { syscall::clone(CloneFlags::empty()).unwrap() } == 0 {
|
||||
redox_daemon::Daemon::new(move |daemon| {
|
||||
let mut socket = File::create(":zero").expect("zerod: failed to create zero scheme");
|
||||
let scheme = ZeroScheme;
|
||||
|
||||
syscall::setrens(0, 0).expect("zerod: failed to enter null namespace");
|
||||
|
||||
daemon.ready().expect("zerod: failed to notify parent");
|
||||
|
||||
loop {
|
||||
let mut packet = Packet::default();
|
||||
if socket.read(&mut packet).expect("zerod: failed to read events from zero scheme") == 0 {
|
||||
break;
|
||||
std::process::exit(0);
|
||||
}
|
||||
|
||||
scheme.handle(&mut packet);
|
||||
|
||||
socket.write(&packet).expect("zerod: failed to write responses to zero scheme");
|
||||
}
|
||||
}
|
||||
}).expect("zerod: failed to daemonize");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user