mirror of
https://github.com/obhq/obliteration.git
synced 2024-06-12 17:47:18 -04:00
40 lines
867 B
Rust
40 lines
867 B
Rust
use self::rootfs::RootFs;
|
|
use std::ffi::c_void;
|
|
use std::os::raw::{c_char, c_int};
|
|
|
|
pub mod fs;
|
|
pub mod rootfs;
|
|
|
|
pub type Logger = extern "C" fn(c_int, c_int, *const c_char, ud: *mut c_void);
|
|
|
|
#[no_mangle]
|
|
pub extern "C" fn kernel_new(
|
|
rootfs: *mut RootFs<'static>,
|
|
_: *mut *mut error::Error,
|
|
) -> *mut Kernel {
|
|
let krn = Box::new(Kernel {
|
|
rootfs: unsafe { *Box::from_raw(rootfs) },
|
|
logger: None,
|
|
});
|
|
|
|
Box::into_raw(krn)
|
|
}
|
|
|
|
#[no_mangle]
|
|
pub extern "C" fn kernel_shutdown(krn: *mut Kernel) {
|
|
unsafe { Box::from_raw(krn) };
|
|
}
|
|
|
|
#[no_mangle]
|
|
pub extern "C" fn kernel_set_logger(krn: &mut Kernel, logger: Option<Logger>, ud: *mut c_void) {
|
|
krn.logger = match logger {
|
|
Some(v) => Some((v, ud)),
|
|
None => None,
|
|
};
|
|
}
|
|
|
|
pub struct Kernel {
|
|
rootfs: RootFs<'static>,
|
|
logger: Option<(Logger, *mut c_void)>,
|
|
}
|