48 lines
1.4 KiB
Rust
48 lines
1.4 KiB
Rust
use std::{env, process};
|
|
|
|
mod filesystem;
|
|
mod scheme;
|
|
|
|
use redox_scheme::{RequestKind, SignalBehavior};
|
|
|
|
use self::scheme::Scheme;
|
|
|
|
fn main() {
|
|
let scheme_name = env::args().nth(1).expect("Usage:\n\tramfs SCHEME_NAME");
|
|
|
|
redox_daemon::Daemon::new(move |daemon| {
|
|
let socket = redox_scheme::Socket::<redox_scheme::V2>::create(&scheme_name)
|
|
.expect("ramfs: failed to create socket");
|
|
|
|
let mut scheme = Scheme::new(scheme_name).expect("ramfs: failed to initialize scheme");
|
|
|
|
libredox::call::setrens(0, 0).expect("ramfs: failed to enter null namespace");
|
|
|
|
daemon
|
|
.ready()
|
|
.expect("ramfs: failed to mark daemon as ready");
|
|
|
|
loop {
|
|
let Some(request) = socket
|
|
.next_request(SignalBehavior::Restart)
|
|
.expect("ramfs: failed to get next scheme request")
|
|
else {
|
|
break;
|
|
};
|
|
match request.kind() {
|
|
RequestKind::Call(call) => {
|
|
let response = call.handle_scheme_mut(&mut scheme);
|
|
|
|
socket
|
|
.write_responses(&[response], SignalBehavior::Restart)
|
|
.expect("ramfs: failed to write next scheme response");
|
|
}
|
|
_ => (),
|
|
}
|
|
}
|
|
|
|
process::exit(0);
|
|
})
|
|
.expect("ramfs: failed to create daemon");
|
|
}
|