diff --git a/Cargo.lock b/Cargo.lock index e65dced..9e78d44 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -262,7 +262,7 @@ checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "microfetch" -version = "0.4.8" +version = "0.4.7" dependencies = [ "criterion", "lazy_static", @@ -272,9 +272,9 @@ dependencies = [ [[package]] name = "nix" -version = "0.30.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "537bc3c4a347b87fd52ac6c03a02ab1302962cfd93373c5d7a112cdc337854cc" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ "bitflags", "cfg-if", diff --git a/Cargo.toml b/Cargo.toml index f598dce..7f00156 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "microfetch" -version = "0.4.8" +version = "0.4.7" edition = "2024" [lib] @@ -12,7 +12,7 @@ name = "microfetch" path = "src/main.rs" [dependencies] -nix = { version = "0.30", features = ["fs", "hostname", "feature"] } +nix = { version = "0.29", features = ["fs", "hostname", "feature"] } lazy_static = "1.5" libc = "0.2" diff --git a/benches/benchmark.rs b/benches/benchmark.rs index 03e49f4..7706617 100644 --- a/benches/benchmark.rs +++ b/benches/benchmark.rs @@ -1,4 +1,4 @@ -use criterion::{Criterion, criterion_group, criterion_main}; +use criterion::{criterion_group, criterion_main, Criterion}; use microfetch_lib::colors::print_dots; use microfetch_lib::desktop::get_desktop_info; use microfetch_lib::release::{get_os_pretty_name, get_system_info}; @@ -10,7 +10,7 @@ use microfetch_lib::uptime::get_current; fn main_benchmark(c: &mut Criterion) { let utsname = nix::sys::utsname::uname().expect("lol"); c.bench_function("user_info", |b| { - b.iter(|| get_username_and_hostname(&utsname)); + b.iter(|| get_username_and_hostname(&utsname)) }); c.bench_function("os_name", |b| b.iter(get_os_pretty_name)); c.bench_function("kernel_version", |b| b.iter(|| get_system_info(&utsname))); diff --git a/src/colors.rs b/src/colors.rs index 11a4b9f..061db15 100644 --- a/src/colors.rs +++ b/src/colors.rs @@ -12,8 +12,8 @@ pub struct Colors { impl Colors { const fn new(is_no_color: bool) -> Self { - if is_no_color { - Self { + match is_no_color { + true => Self { reset: "", blue: "", cyan: "", @@ -21,9 +21,8 @@ impl Colors { yellow: "", red: "", magenta: "", - } - } else { - Self { + }, + false => Self { reset: "\x1b[0m", blue: "\x1b[34m", cyan: "\x1b[36m", @@ -31,7 +30,7 @@ impl Colors { yellow: "\x1b[33m", red: "\x1b[31m", magenta: "\x1b[35m", - } + }, } } } diff --git a/src/main.rs b/src/main.rs index 41a1818..05024df 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,17 +9,18 @@ use crate::desktop::get_desktop_info; use crate::release::{get_os_pretty_name, get_system_info}; use crate::system::{get_memory_usage, get_root_disk_usage, get_shell, get_username_and_hostname}; use crate::uptime::get_current; -use std::io::{Write, stdout}; +use std::io::Write; fn main() -> Result<(), Box> { - if Some("--version") == std::env::args().nth(1).as_deref() { + let args: Vec = std::env::args().collect(); + if args.len() > 1 && args[1] == "--version" { println!("Microfetch {}", env!("CARGO_PKG_VERSION")); } else { let utsname = nix::sys::utsname::uname()?; let fields = Fields { user_info: get_username_and_hostname(&utsname), os_name: get_os_pretty_name()?, - kernel_version: get_system_info(&utsname), + kernel_version: get_system_info(&utsname)?, shell: get_shell(), desktop: get_desktop_info(), uptime: get_current()?, @@ -27,7 +28,7 @@ fn main() -> Result<(), Box> { storage: get_root_disk_usage()?, colors: print_dots(), }; - print_system_info(&fields)?; + print_system_info(&fields); } Ok(()) @@ -49,7 +50,7 @@ struct Fields { colors: String, } -fn print_system_info(fields: &Fields) -> Result<(), Box> { +fn print_system_info(fields: &Fields) { use crate::colors::COLORS; let Fields { @@ -76,7 +77,10 @@ fn print_system_info(fields: &Fields) -> Result<(), Box> {blue} ▟█▛{cyan}▗█▖ {cyan}▟█▛ {cyan} {blue}Desktop{reset}  {desktop} {blue} ▝█▛ {cyan}██▖{blue}▗▄▄▄▄▄▄▄▄▄▄▄ {cyan} {blue}Memory{reset}  {memory_usage} {blue} ▝ {cyan}▟█▜█▖{blue}▀▀▀▀▀██▛▀▀▘ {cyan}󱥎 {blue}Storage (/){reset}  {storage} - {cyan} ▟█▘ ▜█▖ {blue}▝█▛ {cyan} {blue}Colors{reset}  {colors}\n"); + {cyan} ▟█▘ ▜█▖ {blue}▝█▛ {cyan} {blue}Colors{reset}  {colors}"); - Ok(stdout().write_all(system_info.as_bytes())?) + std::io::stdout() + .lock() + .write_all(format!("{}\n", system_info).as_bytes()) + .expect("Failed to write to stdout"); } diff --git a/src/release.rs b/src/release.rs index 6d1b20f..08e5454 100644 --- a/src/release.rs +++ b/src/release.rs @@ -4,13 +4,13 @@ use std::{ io::{self, BufRead, BufReader}, }; -pub fn get_system_info(utsname: &UtsName) -> String { - format!( +pub fn get_system_info(utsname: &UtsName) -> nix::Result { + Ok(format!( "{} {} ({})", utsname.sysname().to_str().unwrap_or("Unknown"), utsname.release().to_str().unwrap_or("Unknown"), utsname.machine().to_str().unwrap_or("Unknown") - ) + )) } pub fn get_os_pretty_name() -> Result { diff --git a/src/system.rs b/src/system.rs index aed8752..4cc1342 100644 --- a/src/system.rs +++ b/src/system.rs @@ -49,6 +49,7 @@ pub fn get_root_disk_usage() -> Result { } pub fn get_memory_usage() -> Result { + #[inline(always)] fn parse_memory_info() -> Result<(f64, f64), io::Error> { let mut total_memory_kb = 0.0; let mut available_memory_kb = 0.0; diff --git a/src/uptime.rs b/src/uptime.rs index 496052a..d9c53de 100644 --- a/src/uptime.rs +++ b/src/uptime.rs @@ -1,19 +1,19 @@ -use std::{io, mem::MaybeUninit}; +use std::io; pub fn get_current() -> Result { - let uptime_seconds = { - let mut info = MaybeUninit::uninit(); - if unsafe { libc::sysinfo(info.as_mut_ptr()) } != 0 { + let uptime_seconds = unsafe { + let mut info: libc::sysinfo = std::mem::zeroed(); + if libc::sysinfo(&mut info) != 0 { return Err(io::Error::last_os_error()); } - unsafe { info.assume_init().uptime as u64 } + info.uptime as u64 }; let days = uptime_seconds / 86400; let hours = (uptime_seconds / 3600) % 24; let minutes = (uptime_seconds / 60) % 60; - let mut result = String::with_capacity(32); + let mut result = String::new(); if days > 0 { result.push_str(&days.to_string()); result.push_str(if days == 1 { " day" } else { " days" });