sys: procfs: split read_meminfo into read and parse functions

So that we can write tests.

Signed-off-by: Dietmar Maurer <dietmar@proxmox.com>
This commit is contained in:
Dietmar Maurer 2025-03-13 12:45:34 +01:00 committed by Thomas Lamprecht
parent da8fdea632
commit ec8a3de133

View File

@ -417,8 +417,12 @@ pub struct ProcFsMemInfo {
pub fn read_meminfo() -> Result<ProcFsMemInfo, Error> { pub fn read_meminfo() -> Result<ProcFsMemInfo, Error> {
let path = "/proc/meminfo"; let path = "/proc/meminfo";
let file = OpenOptions::new().read(true).open(path)?;
let meminfo_str = std::fs::read_to_string(path)?;
parse_proc_meminfo(&meminfo_str)
}
fn parse_proc_meminfo(text: &str) -> Result<ProcFsMemInfo, Error> {
let mut meminfo = ProcFsMemInfo { let mut meminfo = ProcFsMemInfo {
memtotal: 0, memtotal: 0,
memfree: 0, memfree: 0,
@ -430,9 +434,8 @@ pub fn read_meminfo() -> Result<ProcFsMemInfo, Error> {
}; };
let (mut buffers, mut cached) = (0, 0); let (mut buffers, mut cached) = (0, 0);
for line in BufReader::new(&file).lines() { for line in text.lines() {
let content = line?; let mut content_iter = line.split_whitespace();
let mut content_iter = content.split_whitespace();
if let (Some(key), Some(value)) = (content_iter.next(), content_iter.next()) { if let (Some(key), Some(value)) = (content_iter.next(), content_iter.next()) {
match key { match key {
"MemTotal:" => meminfo.memtotal = value.parse::<u64>()? * 1024, "MemTotal:" => meminfo.memtotal = value.parse::<u64>()? * 1024,