Use redox-daemon

This commit is contained in:
4lDO2
2022-07-19 10:32:44 +02:00
parent 090b0ba8cf
commit 4b1b17cf3c
3 changed files with 28 additions and 8 deletions
Generated
+17
View File
@@ -8,6 +8,22 @@ version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "libc"
version = "0.2.126"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
[[package]]
name = "redox-daemon"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "21e31c834277709c7ff3eb74959fe62be4b45b1189ba9d41fd3744cd3a9c554f"
dependencies = [
"libc",
"redox_syscall",
]
[[package]]
name = "redox_syscall"
version = "0.2.16"
@@ -21,5 +37,6 @@ dependencies = [
name = "zerod"
version = "0.1.0"
dependencies = [
"redox-daemon",
"redox_syscall",
]
+2
View File
@@ -2,6 +2,8 @@
name = "zerod"
version = "0.1.0"
authors = ["Alex Lyon <arcterus@mail.com>"]
edition = "2021"
[dependencies]
redox_syscall = "0.2.12"
redox-daemon = "0.1"
+9 -8
View File
@@ -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");
}