use std::fmt::Debug;
use std::{io, mem};
use libc::cpu_set_t;
use crate::pal::linux::Bindings;
#[derive(Debug, Default)]
pub(crate) struct BuildTargetBindings;
#[cfg_attr(coverage_nightly, coverage(off))]
impl Bindings for BuildTargetBindings {
fn sched_setaffinity_current(&self, cpuset: &cpu_set_t) -> Result<(), io::Error> {
let result = unsafe { libc::sched_setaffinity(0, size_of::<cpu_set_t>(), cpuset) };
if result == 0 {
Ok(())
} else {
Err(io::Error::last_os_error())
}
}
fn sched_getcpu(&self) -> i32 {
unsafe { libc::sched_getcpu() }
}
fn sched_getaffinity_current(&self) -> Result<cpu_set_t, io::Error> {
let mut cpuset: cpu_set_t = unsafe { mem::zeroed() };
let result = unsafe { libc::sched_getaffinity(0, size_of::<cpu_set_t>(), &raw mut cpuset) };
if result == 0 {
Ok(cpuset)
} else {
Err(io::Error::last_os_error())
}
}
}