From 4b1b17cf3ce8291960468adf87ec0f8aeb32040b Mon Sep 17 00:00:00 2001 From: 4lDO2 <4lDO2@protonmail.com> Date: Tue, 19 Jul 2022 10:32:44 +0200 Subject: [PATCH] Use redox-daemon --- Cargo.lock | 17 +++++++++++++++++ Cargo.toml | 2 ++ src/main.rs | 17 +++++++++-------- 3 files changed, 28 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ab245501bf..84d5233692 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -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", ] diff --git a/Cargo.toml b/Cargo.toml index 647a6c73fe..ba5558e94e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,6 +2,8 @@ name = "zerod" version = "0.1.0" authors = ["Alex Lyon "] +edition = "2021" [dependencies] redox_syscall = "0.2.12" +redox-daemon = "0.1" diff --git a/src/main.rs b/src/main.rs index e634702832..20fbb3092d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -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"); }