From 0b7d6139aea93bebee53bf724214419f96854c01 Mon Sep 17 00:00:00 2001 From: 4lDO2 <4lDO2@protonmail.com> Date: Mon, 18 Jul 2022 16:20:33 +0200 Subject: [PATCH] Use redox-daemon --- Cargo.lock | 17 +++++++++++++++++ Cargo.toml | 1 + src/main.rs | 27 ++++----------------------- 3 files changed, 22 insertions(+), 23 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d54748f5e1..f47a76d1a9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,10 +8,27 @@ 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 = "logd" version = "0.1.0" dependencies = [ + "redox-daemon", + "redox_syscall", +] + +[[package]] +name = "redox-daemon" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21e31c834277709c7ff3eb74959fe62be4b45b1189ba9d41fd3744cd3a9c554f" +dependencies = [ + "libc", "redox_syscall", ] diff --git a/Cargo.toml b/Cargo.toml index 1285b4cbfa..46290dcec7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,3 +5,4 @@ authors = ["Jeremy Soller "] [dependencies] redox_syscall = "0.2.12" +redox-daemon = "0.1" diff --git a/src/main.rs b/src/main.rs index 86db8b9ac9..2030ef47f0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,18 +1,16 @@ extern crate syscall; use syscall::data::Packet; -use syscall::flag::CloneFlags; use syscall::scheme::SchemeMut; use std::env; use std::fs::{File, OpenOptions}; use std::io::{Read, Write}; -use std::os::unix::io::{FromRawFd, RawFd}; use std::process; use scheme::LogScheme; mod scheme; -fn daemon(mut write: File) { +fn daemon(daemon: redox_daemon::Daemon) -> ! { let mut files = Vec::new(); for arg in env::args().skip(1) { eprintln!("logd: opening {:?}", arg); @@ -28,7 +26,7 @@ fn daemon(mut write: File) { eprintln!("logd: ready for logging on log:"); - write.write(&[0]).expect("logd: failed to write to pipe"); + daemon.ready().expect("logd: failed to notify parent"); let mut scheme = LogScheme::new(files); @@ -43,26 +41,9 @@ fn daemon(mut write: File) { socket.write(&packet).expect("logd: failed to write responses to log scheme"); } + process::exit(0); } fn main() { - let mut pipes = [0; 2]; - syscall::pipe2(&mut pipes, 0).expect("logd: failed to create pipe"); - - let mut read = unsafe { File::from_raw_fd(pipes[0] as RawFd) }; - let write = unsafe { File::from_raw_fd(pipes[1] as RawFd) }; - - let pid = unsafe { syscall::clone(CloneFlags::empty()).expect("logd: failed to fork") }; - if pid == 0 { - drop(read); - - daemon(write); - } else { - drop(write); - - let mut res = [0]; - read.read(&mut res).expect("logd: failed to read from pipe"); - - process::exit(res[0] as i32); - } + redox_daemon::Daemon::new(daemon).expect("logd: failed to daemonize"); }