leenfetch_core/modules/linux/system/
kernel.rs

1use libc::{uname, utsname};
2use std::ffi::CStr;
3
4#[inline(always)]
5pub fn get_kernel() -> Option<String> {
6    unsafe {
7        let mut uts: utsname = std::mem::zeroed();
8        if uname(&mut uts) != 0 {
9            return None;
10        }
11
12        let release = CStr::from_ptr(uts.release.as_ptr())
13            .to_str()
14            .ok()?
15            .to_owned(); // allocates a proper String
16
17        Some(release)
18    }
19}
20
21#[cfg(test)]
22mod tests {
23    use super::*;
24
25    #[test]
26    fn kernel_version_is_some() {
27        let version = get_kernel();
28        assert!(version.is_some(), "Kernel version should not be None");
29    }
30
31    #[test]
32    fn kernel_version_is_not_empty() {
33        let version = get_kernel().expect("Expected Some version string");
34        assert!(
35            !version.trim().is_empty(),
36            "Kernel version should not be empty"
37        );
38    }
39
40    #[test]
41    fn kernel_version_format_valid() {
42        let version = get_kernel().expect("Expected Some version string");
43
44        // Simple check: must contain at least one dot (e.g., "6.5.0")
45        assert!(
46            version.contains('.'),
47            "Kernel version format is suspicious: {}",
48            version
49        );
50    }
51}