leenfetch_core/modules/linux/system/
kernel.rs1use 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(); 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 assert!(
46 version.contains('.'),
47 "Kernel version format is suspicious: {}",
48 version
49 );
50 }
51}