Use redox-daemon
This commit is contained in:
Generated
+17
@@ -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",
|
||||
]
|
||||
|
||||
|
||||
@@ -5,3 +5,4 @@ authors = ["Jeremy Soller <jackpot51@gmail.com>"]
|
||||
|
||||
[dependencies]
|
||||
redox_syscall = "0.2.12"
|
||||
redox-daemon = "0.1"
|
||||
|
||||
+4
-23
@@ -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");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user