lx 0.4.0

A no_std crate to use Linux system calls
Documentation
use core::ptr;

use super::abi::*;
use crate::{
    result_from_value,
    Error,
};

const LINUX_REBOOT_MAGIC1: u32 = 0xfee1dead;
const LINUX_REBOOT_MAGIC2: u32 = 672274793;

pub const RB_POWER_OFF: u32 = 0x4321FEDC;

#[inline]
#[allow(clippy::missing_safety_doc)]
pub unsafe fn reboot(cmd: u32, arg: *mut u8) -> crate::Result<i32> {
    let ret = syscall_4(
        169,
        LINUX_REBOOT_MAGIC1 as usize,
        LINUX_REBOOT_MAGIC2 as usize,
        cmd as usize,
        arg as usize,
    ) as i32;
    result_from_value(ret)
}

/// Powers off the machine.
///
/// This function returns an `Error` instead of a `crate::Result<()>` because it can only return on
/// failure.
#[inline]
pub fn reboot_power_off() -> Error {
    match unsafe { reboot(RB_POWER_OFF, ptr::null_mut()) } {
        Ok(ret) => unreachable!("reboot() returned {ret}"),
        Err(err) => err,
    }
}