diff --git a/src/uu/df/src/blocks.rs b/src/uu/df/src/blocks.rs index d6842f369..ded8b5912 100644 --- a/src/uu/df/src/blocks.rs +++ b/src/uu/df/src/blocks.rs @@ -9,7 +9,7 @@ use std::{env, fmt}; use uucore::{ display::Quotable, - parser::parse_size::{ParseSizeError, parse_size_u64}, + parser::parse_size::{ParseSizeError, parse_size_non_zero_u64, parse_size_u64}, }; /// The first ten powers of 1024. @@ -213,7 +213,7 @@ pub(crate) fn read_block_size(matches: &ArgMatches) -> Result Option { for env_var in ["DF_BLOCK_SIZE", "BLOCK_SIZE", "BLOCKSIZE"] { if let Ok(env_size) = env::var(env_var) { - return parse_size_u64(&env_size).ok(); + return parse_size_non_zero_u64(&env_size).ok(); } } diff --git a/tests/by-util/test_df.rs b/tests/by-util/test_df.rs index b982e929e..149148699 100644 --- a/tests/by-util/test_df.rs +++ b/tests/by-util/test_df.rs @@ -690,6 +690,24 @@ fn test_block_size_from_env() { assert_eq!(get_header("BLOCKSIZE", "333"), "333B-blocks"); } +#[test] +fn test_block_size_from_env_zero() { + fn get_header(env_var: &str, env_value: &str) -> String { + let output = new_ucmd!() + .arg("--output=size") + .env(env_var, env_value) + .succeeds() + .stdout_str_lossy(); + output.lines().next().unwrap().trim().to_string() + } + + let default_block_size_header = "1K-blocks"; + + assert_eq!(get_header("DF_BLOCK_SIZE", "0"), default_block_size_header); + assert_eq!(get_header("BLOCK_SIZE", "0"), default_block_size_header); + assert_eq!(get_header("BLOCKSIZE", "0"), default_block_size_header); +} + #[test] fn test_block_size_from_env_precedences() { fn get_header(one: (&str, &str), two: (&str, &str)) -> String { @@ -747,6 +765,16 @@ fn test_invalid_block_size_from_env() { let header = output.lines().next().unwrap().trim().to_string(); assert_eq!(header, default_block_size_header); + + let output = new_ucmd!() + .arg("--output=size") + .env("DF_BLOCK_SIZE", "0") + .env("BLOCK_SIZE", "222") + .succeeds() + .stdout_str_lossy(); + let header = output.lines().next().unwrap().trim().to_string(); + + assert_eq!(header, default_block_size_header); } #[test]