From fbac2f0a0c69ade3711bacec00d50556965d4a1b Mon Sep 17 00:00:00 2001 From: Thomas Lamprecht Date: Thu, 2 Feb 2023 16:32:37 +0100 Subject: [PATCH] sys: fixup error types handling Signed-off-by: Thomas Lamprecht --- proxmox-sys/src/fs/file.rs | 26 +++++++++++++------------- proxmox-sys/src/linux/procfs/mod.rs | 6 +++--- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/proxmox-sys/src/fs/file.rs b/proxmox-sys/src/fs/file.rs index 75eaaf24..ac513891 100644 --- a/proxmox-sys/src/fs/file.rs +++ b/proxmox-sys/src/fs/file.rs @@ -106,22 +106,22 @@ pub fn file_get_json>(path: P, default: Option) -> Result< .map_err(|err: Error| format_err!("unable to parse json from {:?} - {}", path, err)) } +/// Read the first line of a file as String in std IO error context +pub(crate) fn read_firstline>(path: P) -> Result { + let file = std::fs::File::open(path)?; + + let mut reader = BufReader::new(file); + let mut line = String::new(); + + let _ = reader.read_line(&mut line)?; + + Ok(line) +} + /// Read the first line of a file as String pub fn file_read_firstline>(path: P) -> Result { let path = path.as_ref(); - - try_block!({ - let file = std::fs::File::open(path)?; - - let mut reader = BufReader::new(file); - - let mut line = String::new(); - - let _ = reader.read_line(&mut line)?; - - Ok(line) - }) - .map_err(|err: Error| format_err!("unable to read {:?} - {}", path, err)) + read_firstline(path).map_err(|err| format_err!("unable to read {path:?} - {err}")) } /// Takes a Path and CreateOptions, creates a tmpfile from it and returns diff --git a/proxmox-sys/src/linux/procfs/mod.rs b/proxmox-sys/src/linux/procfs/mod.rs index 3282cc9d..0fc2d6a5 100644 --- a/proxmox-sys/src/linux/procfs/mod.rs +++ b/proxmox-sys/src/linux/procfs/mod.rs @@ -13,7 +13,7 @@ use lazy_static::lazy_static; use nix::unistd::Pid; use serde::Serialize; -use crate::fs::file_read_firstline; +use crate::fs::{read_firstline, file_read_firstline}; pub mod mountinfo; #[doc(inline)] @@ -455,10 +455,10 @@ pub fn read_meminfo() -> Result { meminfo.swapused = meminfo.swaptotal - meminfo.swapfree; - meminfo.memshared = match file_read_firstline("/sys/kernel/mm/ksm/pages_sharing") { + meminfo.memshared = match read_firstline("/sys/kernel/mm/ksm/pages_sharing") { Ok(spages_line) => spages_line.trim_end().parse::()? * 4096, Err(err) if err.kind() == std::io::ErrorKind::NotFound => 0, - Err(err) => return Err(err), + Err(err) => bail!("unable to get KSM pages_sharing - {err}"), }; Ok(meminfo)