diff --git a/src/header/semaphore/mod.rs b/src/header/semaphore/mod.rs index 737ff609d8..34e4d1fcfb 100644 --- a/src/header/semaphore/mod.rs +++ b/src/header/semaphore/mod.rs @@ -1,5 +1,10 @@ +//! `semaphore.h` implementation. +//! +//! See . + use crate::platform::types::*; +/// See . // TODO: Statically verify size and align #[repr(C)] #[derive(Clone, Copy)] @@ -9,6 +14,28 @@ pub union sem_t { } pub type RlctSempahore = crate::sync::Semaphore; +/// See . +// #[no_mangle] +pub unsafe extern "C" fn sem_close(sem: *mut sem_t) -> c_int { + todo!("named semaphores") +} + +/// See . +#[no_mangle] +pub unsafe extern "C" fn sem_destroy(sem: *mut sem_t) -> c_int { + core::ptr::drop_in_place(sem.cast::()); + 0 +} + +/// See . +#[no_mangle] +pub unsafe extern "C" fn sem_getvalue(sem: *mut sem_t, sval: *mut c_int) -> c_int { + sval.write(get(sem).value() as c_int); + + 0 +} + +/// See . #[no_mangle] pub unsafe extern "C" fn sem_init(sem: *mut sem_t, _pshared: c_int, value: c_uint) -> c_int { sem.cast::().write(RlctSempahore::new(value)); @@ -16,12 +43,7 @@ pub unsafe extern "C" fn sem_init(sem: *mut sem_t, _pshared: c_int, value: c_uin 0 } -#[no_mangle] -pub unsafe extern "C" fn sem_destroy(sem: *mut sem_t) -> c_int { - core::ptr::drop_in_place(sem.cast::()); - 0 -} - +/// See . // TODO: va_list // #[no_mangle] pub unsafe extern "C" fn sem_open( @@ -31,30 +53,7 @@ pub unsafe extern "C" fn sem_open( todo!("named semaphores") } -// #[no_mangle] -pub unsafe extern "C" fn sem_close(sem: *mut sem_t) -> c_int { - todo!("named semaphores") -} - -// #[no_mangle] -pub unsafe extern "C" fn sem_unlink(name: *const c_char) -> c_int { - todo!("named semaphores") -} - -#[no_mangle] -pub unsafe extern "C" fn sem_wait(sem: *mut sem_t) -> c_int { - get(sem).wait(None); - - 0 -} - -#[no_mangle] -pub unsafe extern "C" fn sem_trywait(sem: *mut sem_t) -> c_int { - get(sem).try_wait(); - - 0 -} - +/// See . #[no_mangle] pub unsafe extern "C" fn sem_post(sem: *mut sem_t) -> c_int { get(sem).post(1); @@ -62,9 +61,24 @@ pub unsafe extern "C" fn sem_post(sem: *mut sem_t) -> c_int { 0 } +/// See . #[no_mangle] -pub unsafe extern "C" fn sem_getvalue(sem: *mut sem_t, sval: *mut c_int) -> c_int { - sval.write(get(sem).value() as c_int); +pub unsafe extern "C" fn sem_trywait(sem: *mut sem_t) -> c_int { + get(sem).try_wait(); + + 0 +} + +/// See . +// #[no_mangle] +pub unsafe extern "C" fn sem_unlink(name: *const c_char) -> c_int { + todo!("named semaphores") +} + +/// See . +#[no_mangle] +pub unsafe extern "C" fn sem_wait(sem: *mut sem_t) -> c_int { + get(sem).wait(None); 0 }