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:
bjorn3
2025-07-12 16:25:22 +02:00
parent 2abbf581c2
commit a567d87842
2 changed files with 10 additions and 13 deletions
+1 -12
View File
@@ -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
View File
@@ -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();