diff options
-rw-r--r-- | src/uu/ls/src/ls.rs | 42 | ||||
-rw-r--r-- | tests/by-util/test_ls.rs | 50 |
2 files changed, 74 insertions, 18 deletions
diff --git a/src/uu/ls/src/ls.rs b/src/uu/ls/src/ls.rs index 7ad1704fc..ab8fbf043 100644 --- a/src/uu/ls/src/ls.rs +++ b/src/uu/ls/src/ls.rs @@ -828,17 +828,13 @@ impl Config { let raw_block_size = if let Some(opt_block_size) = opt_block_size { OsString::from(opt_block_size) - } else if !opt_kb { - if let Some(env_var_ls_block_size) = env_var_ls_block_size { - env_var_ls_block_size - } else if let Some(env_var_block_size) = env_var_block_size { - env_var_block_size - } else if let Some(env_var_blocksize) = env_var_blocksize { - is_env_var_blocksize = true; - env_var_blocksize - } else { - OsString::from("") - } + } else if let Some(env_var_ls_block_size) = env_var_ls_block_size { + env_var_ls_block_size + } else if let Some(env_var_block_size) = env_var_block_size { + env_var_block_size + } else if let Some(env_var_blocksize) = env_var_blocksize { + is_env_var_blocksize = true; + env_var_blocksize } else { OsString::from("") }; @@ -846,13 +842,19 @@ impl Config { let (file_size_block_size, block_size) = if !opt_si && !opt_hr && !raw_block_size.is_empty() { match parse_size_u64(&raw_block_size.to_string_lossy()) { - Ok(size) => { - if is_env_var_blocksize { - (DEFAULT_FILE_SIZE_BLOCK_SIZE, size) - } else { - (size, size) + Ok(size) => match (is_env_var_blocksize, opt_kb) { + (true, true) => (DEFAULT_FILE_SIZE_BLOCK_SIZE, DEFAULT_BLOCK_SIZE), + (true, false) => (DEFAULT_FILE_SIZE_BLOCK_SIZE, size), + (false, true) => { + // --block-size overrides -k + if opt_block_size.is_some() { + (size, size) + } else { + (size, DEFAULT_BLOCK_SIZE) + } } - } + (false, false) => (size, size), + }, Err(_) => { // only fail if invalid block size was specified with --block-size, // ignore invalid block size from env vars @@ -869,7 +871,11 @@ impl Config { } } } else if env_var_posixly_correct.is_some() { - (DEFAULT_FILE_SIZE_BLOCK_SIZE, POSIXLY_CORRECT_BLOCK_SIZE) + if opt_kb { + (DEFAULT_FILE_SIZE_BLOCK_SIZE, DEFAULT_BLOCK_SIZE) + } else { + (DEFAULT_FILE_SIZE_BLOCK_SIZE, POSIXLY_CORRECT_BLOCK_SIZE) + } } else if opt_si { (DEFAULT_FILE_SIZE_BLOCK_SIZE, 1000) } else { diff --git a/tests/by-util/test_ls.rs b/tests/by-util/test_ls.rs index a7744063f..5da8912e3 100644 --- a/tests/by-util/test_ls.rs +++ b/tests/by-util/test_ls.rs @@ -3890,6 +3890,56 @@ fn test_posixly_correct_and_block_size_env_vars() { .stdout_contains(" 1024 "); } +#[cfg(all(unix, feature = "dd"))] +#[test] +fn test_posixly_correct_and_block_size_env_vars_with_k() { + let scene = TestScenario::new(util_name!()); + + scene + .ccmd("dd") + .arg("if=/dev/zero") + .arg("of=file") + .arg("bs=1024") + .arg("count=1") + .succeeds(); + + scene + .ucmd() + .arg("-l") + .arg("-k") + .env("POSIXLY_CORRECT", "some_value") + .succeeds() + .stdout_contains_line("total 4") + .stdout_contains(" 1024 "); + + scene + .ucmd() + .arg("-l") + .arg("-k") + .env("LS_BLOCK_SIZE", "512") + .succeeds() + .stdout_contains_line("total 4") + .stdout_contains(" 2 "); + + scene + .ucmd() + .arg("-l") + .arg("-k") + .env("BLOCK_SIZE", "512") + .succeeds() + .stdout_contains_line("total 4") + .stdout_contains(" 2 "); + + scene + .ucmd() + .arg("-l") + .arg("-k") + .env("BLOCKSIZE", "512") + .succeeds() + .stdout_contains_line("total 4") + .stdout_contains(" 1024 "); +} + #[test] fn test_ls_invalid_block_size() { new_ucmd!() |