use std::io;
#[repr(transparent)]
pub struct Timex(pub libc::timex);
impl Default for Timex {
fn default() -> Self {
Self(unsafe { std::mem::zeroed() })
}
}
impl Timex {
pub fn new() -> Self {
Self::default()
}
}
#[cfg(target_os = "linux")]
pub fn adjtimex(tx: &mut Timex) -> io::Result<libc::c_int> {
let ret = unsafe { libc::adjtimex(&mut tx.0 as *mut _) };
if ret < 0 {
return Err(io::Error::last_os_error());
}
Ok(ret)
}
#[cfg(target_os = "linux")]
pub fn clock_adjtime(clockid: libc::clockid_t, tx: &mut Timex) -> io::Result<libc::c_int> {
let ret = unsafe { libc::clock_adjtime(clockid, &mut tx.0 as *mut _) };
if ret < 0 {
return Err(io::Error::last_os_error());
}
Ok(ret)
}
#[cfg(target_os = "freebsd")]
pub fn ntp_adjtime(tx: &mut Timex) -> io::Result<libc::c_int> {
let ret = unsafe { libc::ntp_adjtime(&mut tx.0 as *mut _) };
if ret < 0 {
return Err(io::Error::last_os_error());
}
Ok(ret)
}