summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Hofstetter <daniel.hofstetter@42dh.com>2023-12-23 17:24:54 +0100
committerDaniel Hofstetter <daniel.hofstetter@42dh.com>2023-12-24 16:35:49 +0100
commit270ac90cc13cf446cdccd884e3b9e4de4aec5842 (patch)
tree99aa20f31a2bd4b88f44f1346c52f2f495b79aa7
parent12ade877863c52de0be8201a193de299884dd77f (diff)
ls: set correct block size when -k is provided
-rw-r--r--src/uu/ls/src/ls.rs42
-rw-r--r--tests/by-util/test_ls.rs50
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!()