From 55f3da7ddc62d025a6645aa2d07e482bd7b7ceb6 Mon Sep 17 00:00:00 2001 From: Tuan Anh Tran Date: Tue, 3 Feb 2026 21:06:41 +0700 Subject: [PATCH] df: df missing 2>/dev/full does not abort Signed-off-by: Tuan Anh Tran --- src/uu/df/src/df.rs | 43 ++++++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/src/uu/df/src/df.rs b/src/uu/df/src/df.rs index ff72dce34a3..3232c53922b 100644 --- a/src/uu/df/src/df.rs +++ b/src/uu/df/src/df.rs @@ -12,16 +12,16 @@ use blocks::HumanReadable; use clap::builder::ValueParser; use table::HeaderMode; use uucore::display::Quotable; -use uucore::error::{UError, UResult, USimpleError, get_exit_code}; +use uucore::error::{UError, UResult, USimpleError, get_exit_code, set_exit_code}; use uucore::fsext::{MountInfo, read_fs_list}; use uucore::parser::parse_size::ParseSizeError; use uucore::translate; -use uucore::{format_usage, show}; +use uucore::{format_usage, util_name}; use clap::{Arg, ArgAction, ArgMatches, Command, parser::ValueSource}; use std::ffi::OsString; -use std::io::stdout; +use std::io::{Write, stderr, stdout}; use std::path::Path; use thiserror::Error; @@ -31,6 +31,8 @@ use crate::filesystem::Filesystem; use crate::filesystem::FsError; use crate::table::Table; +static EXIT_ERR: i32 = 1; + static OPT_HELP: &str = "help"; static OPT_ALL: &str = "all"; static OPT_BLOCKSIZE: &str = "blocksize"; @@ -372,31 +374,34 @@ where } } Err(FsError::InvalidPath) => { - show!(USimpleError::new( - 1, - translate!("df-error-no-such-file-or-directory", "path" => path.as_ref().maybe_quote()) - )); + let e = USimpleError::new( + EXIT_ERR, + translate!("df-error-no-such-file-or-directory", "path" => path.as_ref().maybe_quote()), + ); + set_exit_code(EXIT_ERR); + let _ = writeln!(stderr(), "{}: {e}", util_name()); } Err(FsError::MountMissing) => { - show!(USimpleError::new( - 1, - translate!("df-error-no-file-systems-processed") - )); + let e = + USimpleError::new(EXIT_ERR, translate!("df-error-no-file-systems-processed")); + set_exit_code(EXIT_ERR); + let _ = writeln!(stderr(), "{}: {e}", util_name()); } #[cfg(not(windows))] Err(FsError::OverMounted) => { - show!(USimpleError::new( - 1, - translate!("df-error-cannot-access-over-mounted", "path" => path.as_ref().quote()) - )); + let e = USimpleError::new( + EXIT_ERR, + translate!("df-error-cannot-access-over-mounted", "path" => path.as_ref().quote()), + ); + set_exit_code(EXIT_ERR); + let _ = writeln!(stderr(), "{}: {e}", util_name()); } } } if get_exit_code() == 0 && result.is_empty() { - show!(USimpleError::new( - 1, - translate!("df-error-no-file-systems-processed") - )); + let e = USimpleError::new(EXIT_ERR, translate!("df-error-no-file-systems-processed")); + set_exit_code(EXIT_ERR); + let _ = writeln!(stderr(), "{}: {e}", util_name()); return Ok(result); }