Crate rusty_doors
source ·Expand description
§Rusty Doors
A streamlined and safe interface for creating and using Unix Doors.
§A simple door server
use rusty_doors::{door_create, door_run};
use rusty_doors_macros::door;
use std::ffi::CString;
#[derive(Default)]
#[repr(C)]
struct Wrapped {
val: u64,
other: u16,
}
// To make a door handler just apply the #[door] attribute macro
#[door]
fn serv_proc(x: u64) -> Wrapped {
let res = x + 47;
println!("ARG: {}", x);
return Wrapped {
val: res,
other: 99,
};
}
fn main() {
let path = CString::new("/tmp/addr-test-door").expect("cstring");
let fd = door_create(serv_proc);
door_run(fd, path.as_c_str());
}§A door client
use rusty_doors::door_call;
use std::fs::File;
use std::os::unix::io::AsRawFd;
#[derive(Default)]
#[repr(C)]
struct Wrapped {
val: u64,
other: u16,
}
fn main() {
let file = File::open("/tmp/addr-test-door").expect("open fd");
let x: u64 = 74;
let res: Wrapped = door_call(file.as_raw_fd(), x);
assert_eq!(res.val, 121);
assert_eq!(res.other, 99);
}Modules§
- System level doors elements.
Functions§
- Call the door referenced by
fdwith argument datax. Returns door call result by value. - Call the door referenced by
fdwith argument slicex. Returns doo call result by value. - Call the door referenced by
fdwith argument datax. The address pointed to byreswill be allocated by the door, and the result placed at that location. The return value is the address to the pointed to address. - Create a door. The provided
sys::DoorFuncwill be called any time this door is called. Returns a file descriptor reference the created door. - Run a door server for the door handler referenced by
fd.fdshould be the result of callingdoor_create.