forked from AbleOS/ableos
ablelib
This commit is contained in:
parent
ec7a80c93a
commit
9975d08054
4
Cargo.lock
generated
4
Cargo.lock
generated
|
@ -2,6 +2,10 @@
|
|||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "ablewasi"
|
||||
version = "0.1.0"
|
||||
|
||||
[[package]]
|
||||
name = "ahash"
|
||||
version = "0.7.6"
|
||||
|
|
|
@ -2,4 +2,4 @@ resolver = "2"
|
|||
|
||||
|
||||
[workspace]
|
||||
members = ["kernel", "repbuild"]
|
||||
members = ["kernel", "repbuild", "user/ablewasi"]
|
||||
|
|
8
user/ablewasi/Cargo.toml
Normal file
8
user/ablewasi/Cargo.toml
Normal file
|
@ -0,0 +1,8 @@
|
|||
[package]
|
||||
name = "ablewasi"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
29
user/ablewasi/src/api.rs
Normal file
29
user/ablewasi/src/api.rs
Normal file
|
@ -0,0 +1,29 @@
|
|||
use crate::sys;
|
||||
|
||||
pub struct Object{
|
||||
pub id: i64
|
||||
}
|
||||
|
||||
impl Drop for Object{
|
||||
fn drop(&mut self) {
|
||||
unsafe{
|
||||
sys::drop_object(self.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Object{
|
||||
fn to_global(self) -> [u64; 4]{
|
||||
let b = unsafe {
|
||||
sys::make_global(self.id).into()
|
||||
};
|
||||
core::mem::forget(self);
|
||||
return b;
|
||||
}
|
||||
|
||||
fn from_global(a: [u64; 4]) -> Object{
|
||||
return Object{id: unsafe {
|
||||
sys::take_global(a.into())
|
||||
}};
|
||||
}
|
||||
}
|
8
user/ablewasi/src/lib.rs
Normal file
8
user/ablewasi/src/lib.rs
Normal file
|
@ -0,0 +1,8 @@
|
|||
pub mod sys;
|
||||
pub mod api;
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
}
|
29
user/ablewasi/src/sys.rs
Normal file
29
user/ablewasi/src/sys.rs
Normal file
|
@ -0,0 +1,29 @@
|
|||
#[repr(C)]
|
||||
pub struct ROAResult(*const u8,i32);
|
||||
|
||||
pub type LocalObject = i64;
|
||||
|
||||
|
||||
#[repr(C)]
|
||||
pub struct GlobalObject(u64,u64,u64,u64);
|
||||
|
||||
impl From<[u64;4]> for GlobalObject {
|
||||
fn from(value: [u64;4]) -> Self {
|
||||
GlobalObject(value[0], value[1], value[2], value[3])
|
||||
}
|
||||
}
|
||||
|
||||
impl From<GlobalObject> for [u64; 4]{
|
||||
fn from(value: GlobalObject) -> Self {
|
||||
let GlobalObject(a,b,c,d) = value;
|
||||
[a,b,c,d]
|
||||
}
|
||||
}
|
||||
|
||||
extern "C"{
|
||||
pub fn create_object(a: *const u8, b: i32) -> LocalObject;
|
||||
pub fn read_object_attribute(a: LocalObject, b: *const i8, c: i32) -> ROAResult;
|
||||
pub fn take_global(a: GlobalObject) -> LocalObject;
|
||||
pub fn make_global(a: LocalObject) -> GlobalObject;
|
||||
pub fn drop_object(a: LocalObject);
|
||||
}
|
Loading…
Reference in a new issue