hardware 0.0.9

A no_std bare-metal hardware abstraction layer — all port I/O, memory and swap allocations are guarded at runtime. Do not consider this dependency stable before x.1.x
Documentation
use core::sync::atomic::{AtomicI64, Ordering};

pub struct OsConstants {
    pub at_fdcwd: i64,
    pub sigchld: i64,
    pub map_private_anon: i64,
    pub map_shared_anon: i64,
    pub map_shared: i64,
    pub prot_read_write: i64,
    pub clock_monotonic: i64,
    pub o_creat: i64,
    pub o_trunc: i64,
    pub o_nonblock: i64,
    pub o_excl: i64,
    pub o_directory: i64,
}

static OS_AT_FDCWD: AtomicI64 = AtomicI64::new(0);
static OS_SIGCHLD: AtomicI64 = AtomicI64::new(0);
static OS_MAP_PRIVATE_ANON: AtomicI64 = AtomicI64::new(0);
static OS_MAP_SHARED_ANON: AtomicI64 = AtomicI64::new(0);
static OS_MAP_SHARED: AtomicI64 = AtomicI64::new(0);
static OS_PROT_READ_WRITE: AtomicI64 = AtomicI64::new(0);
static OS_CLOCK_MONOTONIC: AtomicI64 = AtomicI64::new(0);
static OS_O_CREAT: AtomicI64 = AtomicI64::new(0);
static OS_O_TRUNC: AtomicI64 = AtomicI64::new(0);
static OS_O_NONBLOCK: AtomicI64 = AtomicI64::new(0);
static OS_O_EXCL: AtomicI64 = AtomicI64::new(0);
static OS_O_DIRECTORY: AtomicI64 = AtomicI64::new(0);

pub fn set_os_constants(c: &OsConstants) {
    OS_AT_FDCWD.store(c.at_fdcwd, Ordering::Release);
    OS_SIGCHLD.store(c.sigchld, Ordering::Release);
    OS_MAP_PRIVATE_ANON.store(c.map_private_anon, Ordering::Release);
    OS_MAP_SHARED_ANON.store(c.map_shared_anon, Ordering::Release);
    OS_MAP_SHARED.store(c.map_shared, Ordering::Release);
    OS_PROT_READ_WRITE.store(c.prot_read_write, Ordering::Release);
    OS_CLOCK_MONOTONIC.store(c.clock_monotonic, Ordering::Release);
    OS_O_CREAT.store(c.o_creat, Ordering::Release);
    OS_O_TRUNC.store(c.o_trunc, Ordering::Release);
    OS_O_NONBLOCK.store(c.o_nonblock, Ordering::Release);
    OS_O_EXCL.store(c.o_excl, Ordering::Release);
    OS_O_DIRECTORY.store(c.o_directory, Ordering::Release);
}

pub fn os_at_fdcwd() -> i64 {
    OS_AT_FDCWD.load(Ordering::Acquire)
}
pub fn os_sigchld() -> i64 {
    OS_SIGCHLD.load(Ordering::Acquire)
}
pub fn os_map_private_anon() -> i64 {
    OS_MAP_PRIVATE_ANON.load(Ordering::Acquire)
}
pub fn os_map_shared_anon() -> i64 {
    OS_MAP_SHARED_ANON.load(Ordering::Acquire)
}
pub fn os_map_shared() -> i64 {
    OS_MAP_SHARED.load(Ordering::Acquire)
}
pub fn os_prot_read_write() -> i64 {
    OS_PROT_READ_WRITE.load(Ordering::Acquire)
}
pub fn os_clock_monotonic() -> i64 {
    OS_CLOCK_MONOTONIC.load(Ordering::Acquire)
}
pub fn os_o_creat() -> i64 {
    OS_O_CREAT.load(Ordering::Acquire)
}
pub fn os_o_trunc() -> i64 {
    OS_O_TRUNC.load(Ordering::Acquire)
}
pub fn os_o_nonblock() -> i64 {
    OS_O_NONBLOCK.load(Ordering::Acquire)
}
pub fn os_o_excl() -> i64 {
    OS_O_EXCL.load(Ordering::Acquire)
}
pub fn os_o_directory() -> i64 {
    OS_O_DIRECTORY.load(Ordering::Acquire)
}