From 376291afda1ececccd32fd67c53c02e4b6b9e3b7 Mon Sep 17 00:00:00 2001 From: desbma Date: Wed, 1 Jan 2025 23:59:12 +0100 Subject: [PATCH] fix: always check subprocess return codes --- src/device/drive.rs | 9 +++++++++ src/probe/hddtemp.rs | 5 +++++ src/probe/smartctl.rs | 10 ++++++++++ 3 files changed, 24 insertions(+) diff --git a/src/device/drive.rs b/src/device/drive.rs index 483e6dd..11498de 100644 --- a/src/device/drive.rs +++ b/src/device/drive.rs @@ -80,6 +80,10 @@ impl Drive { .stdout(Stdio::piped()) .stderr(Stdio::null()) .output()?; + if !output.status.success() { + log::trace!("{}", output.status); + continue; + } // log::trace!("{}", std::str::from_utf8(&output.stdout).unwrap()); if let Some(line) = output.stdout.lines().map_while(Result::ok).find(|l| { let l = l.trim_start(); @@ -104,6 +108,11 @@ impl Drive { .stdout(Stdio::piped()) .stderr(Stdio::null()) .output()?; + anyhow::ensure!( + output.status.success(), + "hdparm failed with code {}", + output.status + ); let state = output .stdout .lines() diff --git a/src/probe/hddtemp.rs b/src/probe/hddtemp.rs index b17daec..3811b19 100644 --- a/src/probe/hddtemp.rs +++ b/src/probe/hddtemp.rs @@ -124,6 +124,11 @@ impl DeviceTempProber for InvocationProber { .stderr(Stdio::null()) .env("LANG", "C") .output()?; + anyhow::ensure!( + output.status.success(), + "hddtemp failed with code {}", + output.status + ); // TODO handle "drive is sleeping" case let temp = str::from_utf8(&output.stdout)?.trim_end().parse()?; Ok(temp) diff --git a/src/probe/smartctl.rs b/src/probe/smartctl.rs index b18dbab..7ef2134 100644 --- a/src/probe/smartctl.rs +++ b/src/probe/smartctl.rs @@ -54,6 +54,11 @@ impl DeviceTempProber for SctProber { .stderr(Stdio::null()) .env("LANG", "C") .output()?; + anyhow::ensure!( + output.status.success(), + "smartctl failed with code {}", + output.status + ); let temp = output .stdout .lines() @@ -162,6 +167,11 @@ impl DeviceTempProber for AttribProber { .stderr(Stdio::null()) .env("LANG", "C") .output()?; + anyhow::ensure!( + output.status.success(), + "smartctl failed with code {}", + output.status + ); let temp = output .stdout .lines()