uptime: get rid of nix crate

This commit is contained in:
raf 2025-03-30 22:33:16 +03:00
commit e9aa9a2bbe
Signed by: NotAShelf
GPG key ID: 29D95B64378DB4BF

View file

@ -1,32 +1,39 @@
use nix::sys::sysinfo::sysinfo;
use std::io; use std::io;
pub fn get_current() -> Result<String, io::Error> { pub fn get_current() -> Result<String, io::Error> {
let info = sysinfo().map_err(|e| io::Error::new(io::ErrorKind::Other, e))?; let uptime_seconds = unsafe {
let uptime_seconds = info.uptime().as_secs(); let mut info: libc::sysinfo = std::mem::zeroed();
if libc::sysinfo(&mut info) != 0 {
return Err(io::Error::last_os_error());
}
info.uptime as u64
};
let days = uptime_seconds / (60 * 60 * 24); let days = uptime_seconds / 86400;
let hours = (uptime_seconds / 3600) % 24; let hours = (uptime_seconds / 3600) % 24;
let minutes = (uptime_seconds / 60) % 60; let minutes = (uptime_seconds / 60) % 60;
let mut result = String::new(); let mut result = String::new();
if days > 0 { if days > 0 {
result.push_str(&format!("{days} day{}", if days > 1 { "s" } else { "" })); result.push_str(&days.to_string());
result.push_str(if days == 1 { " day" } else { " days" });
} }
if hours > 0 { if hours > 0 {
if !result.is_empty() { if !result.is_empty() {
result.push_str(", "); result.push_str(", ");
} }
result.push_str(&format!("{hours} hour{}", if hours > 1 { "s" } else { "" })); result.push_str(&hours.to_string());
result.push_str(if hours == 1 { " hour" } else { " hours" });
} }
if minutes > 0 { if minutes > 0 {
if !result.is_empty() { if !result.is_empty() {
result.push_str(", "); result.push_str(", ");
} }
result.push_str(&format!( result.push_str(&minutes.to_string());
"{minutes} minute{}", result.push_str(if minutes == 1 { " minute" } else { " minutes" });
if minutes > 1 { "s" } else { "" } }
)); if result.is_empty() {
result.push_str("less than a minute");
} }
Ok(result) Ok(result)