twizzler_abi/syscall/
create.rs

1pub use twizzler_rt_abi::object::{
2    BackingType, CreateTieFlags, CreateTieSpec, LifetimeType, ObjectCreate, ObjectCreateFlags,
3    ObjectSource,
4};
5use twizzler_rt_abi::{
6    bindings::{object_source, object_tie},
7    Result,
8};
9
10use super::{convert_codes_to_result, twzerr, Syscall};
11use crate::{arch::syscall::raw_syscall, object::ObjID};
12
13/// Create an object, returning either its ID or an error.
14pub fn sys_object_create(
15    create: ObjectCreate,
16    sources: &[object_source],
17    ties: &[object_tie],
18) -> Result<ObjID> {
19    let args = [
20        &create as *const ObjectCreate as u64,
21        sources.as_ptr() as u64,
22        sources.len() as u64,
23        ties.as_ptr() as u64,
24        ties.len() as u64,
25    ];
26    let (code, val) = unsafe { raw_syscall(Syscall::ObjectCreate, &args) };
27    convert_codes_to_result(
28        code,
29        val,
30        |c, _| c == 0,
31        |x, y| crate::object::ObjID::from_parts([x, y]),
32        twzerr,
33    )
34}