From 54d64d6ecb16b303a7dd7afd2ca8fc756f1cb069 Mon Sep 17 00:00:00 2001 From: 4lDO2 <4lDO2@protonmail.com> Date: Mon, 18 Jul 2022 16:21:21 +0200 Subject: [PATCH] Use redox-daemon --- Cargo.lock | 11 +++++++++++ Cargo.toml | 1 + src/dnsd/main.rs | 11 +++++++---- src/smolnetd/main.rs | 11 +++++++---- 4 files changed, 26 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5b70b8051a..d085d13a57 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -270,6 +270,16 @@ version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" +[[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_event" version = "0.1.0" @@ -286,6 +296,7 @@ dependencies = [ "dns-parser", "log 0.3.9", "netutils", + "redox-daemon", "redox_event", "redox_syscall", "smoltcp", diff --git a/Cargo.toml b/Cargo.toml index 689cf03236..a44597032c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,6 +17,7 @@ path = "src/lib/lib.rs" [dependencies] netutils = { git = "https://gitlab.redox-os.org/redox-os/netutils.git", branch = "redox-unix" } redox_event = { git = "https://gitlab.redox-os.org/redox-os/event.git" } +redox-daemon = "0.1" redox_syscall = "0.2.12" byteorder = { version = "1.0", default-features = false } dns-parser = "0.7.1" diff --git a/src/dnsd/main.rs b/src/dnsd/main.rs index eef8ea9517..b52090b3a5 100644 --- a/src/dnsd/main.rs +++ b/src/dnsd/main.rs @@ -21,7 +21,7 @@ use syscall::{CloneFlags, EventFlags}; mod scheme; -fn run() -> Result<()> { +fn run(daemon: redox_daemon::Daemon) -> Result<()> { use syscall::flag::*; let dns_fd = syscall::open(":dns", O_RDWR | O_CREAT | O_NONBLOCK) @@ -53,6 +53,8 @@ fn run() -> Result<()> { syscall::setrens(0, 0).expect("dnsd: failed to enter null namespace"); + daemon.ready().expect("dnsd: failed to notify parent"); + let dnsd_ = Rc::clone(&dnsd); event_queue @@ -82,11 +84,12 @@ fn run() -> Result<()> { } fn main() { - if unsafe { syscall::clone(CloneFlags::empty()).unwrap() } == 0 { + redox_daemon::Daemon::new(move |daemon| { logger::init_logger(); - if let Err(err) = run() { + if let Err(err) = run(daemon) { error!("dnsd: {}", err); process::exit(1); } - } + process::exit(0); + }).expect("dnsd: failed to daemonize"); } diff --git a/src/smolnetd/main.rs b/src/smolnetd/main.rs index 3a6241b320..79da5ee7f7 100644 --- a/src/smolnetd/main.rs +++ b/src/smolnetd/main.rs @@ -27,7 +27,7 @@ mod device; mod port_set; mod scheme; -fn run() -> Result<()> { +fn run(daemon: redox_daemon::Daemon) -> Result<()> { use syscall::flag::*; trace!("opening network:"); @@ -91,6 +91,8 @@ fn run() -> Result<()> { syscall::setrens(0, 0).expect("smolnetd: failed to enter null namespace"); + daemon.ready().expect("smolnetd: failed to notify parent"); + let smolnetd_ = Rc::clone(&smolnetd); event_queue @@ -150,12 +152,13 @@ fn run() -> Result<()> { } fn main() { - if unsafe { syscall::clone(CloneFlags::empty()).unwrap() } == 0 { + redox_daemon::Daemon::new(move |daemon| { logger::init_logger(); - if let Err(err) = run() { + if let Err(err) = run(daemon) { error!("smoltcpd: {}", err); process::exit(1); } - } + process::exit(0); + }).expect("smoltcp: failed to daemonize"); }