logd: Open kernel log inside LogScheme::new.
This allows a future commit to skip writing to the kernel log when necessary.
This commit is contained in:
+1
-12
@@ -1,6 +1,4 @@
|
||||
use redox_scheme::{RequestKind, SignalBehavior, Socket};
|
||||
use std::env;
|
||||
use std::fs::OpenOptions;
|
||||
use std::io::{Read, Write};
|
||||
use std::process;
|
||||
|
||||
@@ -9,15 +7,6 @@ use crate::scheme::LogScheme;
|
||||
mod scheme;
|
||||
|
||||
fn daemon(daemon: redox_daemon::Daemon) -> ! {
|
||||
let mut files = Vec::new();
|
||||
for arg in env::args().skip(1) {
|
||||
eprintln!("logd: opening {:?}", arg);
|
||||
match OpenOptions::new().write(true).open(&arg) {
|
||||
Ok(file) => files.push(file),
|
||||
Err(err) => eprintln!("logd: failed to open {:?}: {:?}", arg, err),
|
||||
}
|
||||
}
|
||||
|
||||
let socket = Socket::create("log").expect("logd: failed to create log scheme");
|
||||
|
||||
std::process::Command::new(std::env::current_exe().unwrap())
|
||||
@@ -29,7 +18,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
|
||||
|
||||
daemon.ready().expect("logd: failed to notify parent");
|
||||
|
||||
let mut scheme = LogScheme::new(files);
|
||||
let mut scheme = LogScheme::new();
|
||||
|
||||
while let Some(request) = socket
|
||||
.next_request(SignalBehavior::Restart)
|
||||
|
||||
+9
-1
@@ -30,13 +30,21 @@ enum OutputCmd {
|
||||
}
|
||||
|
||||
impl LogScheme {
|
||||
pub fn new(mut files: Vec<File>) -> Self {
|
||||
pub fn new() -> Self {
|
||||
let mut kernel_debug = OpenOptions::new()
|
||||
.write(true)
|
||||
.open("/scheme/debug")
|
||||
.unwrap();
|
||||
|
||||
let (output_tx, output_rx) = mpsc::channel::<OutputCmd>();
|
||||
|
||||
std::thread::spawn(move || {
|
||||
let mut files: Vec<File> = vec![];
|
||||
for cmd in output_rx {
|
||||
match cmd {
|
||||
OutputCmd::Log(line) => {
|
||||
let _ = kernel_debug.write(&line);
|
||||
let _ = kernel_debug.flush();
|
||||
for file in &mut files {
|
||||
let _ = file.write(&line);
|
||||
let _ = file.flush();
|
||||
|
||||
Reference in New Issue
Block a user