diff --git a/src/uucore/src/lib/features/fsext.rs b/src/uucore/src/lib/features/fsext.rs index 4be4d66cf8f..aa916c31a07 100644 --- a/src/uucore/src/lib/features/fsext.rs +++ b/src/uucore/src/lib/features/fsext.rs @@ -683,7 +683,9 @@ impl FsUsage { // Total number of free blocks. bfree: number_of_free_clusters as u64, // Total number of free blocks available to non-privileged processes. - bavail: 0, + // Windows: 'bavail' should reflect free clusters available to non-privileged processes. + // See: https://github.com/uutils/coreutils/issues/7461 + bavail: number_of_free_clusters as u64, bavail_top_bit_set: ((bytes_per_sector as u64) & (1u64.rotate_right(1))) != 0, // Total number of file nodes (inodes) on the file system. files: 0, // Not available on windows diff --git a/tests/by-util/test_df.rs b/tests/by-util/test_df.rs index 9b57d6020e5..5ac56b6f17a 100644 --- a/tests/by-util/test_df.rs +++ b/tests/by-util/test_df.rs @@ -973,3 +973,26 @@ fn test_nonexistent_file() { .stderr_is("df: does-not-exist: No such file or directory\n") .stdout_is("File\n.\n"); } + +#[test] +#[cfg(target_os = "windows")] +fn test_windows_avail_column_not_zero() { + // Regression test for issue #7461: Avail column should not be 0 on Windows + let output = new_ucmd!() + .args(&["--output=avail"]) + .succeeds() + .stdout_str_lossy(); + + let lines: Vec<&str> = output.lines().skip(1).collect(); + assert!(!lines.is_empty(), "Should have at least one filesystem"); + + // At least one filesystem should have non-zero avail + let has_non_zero = lines + .iter() + .any(|line| line.trim().parse::().map(|v| v > 0).unwrap_or(false)); + + assert!( + has_non_zero, + "At least one filesystem should have non-zero available space" + ); +}