Skip to content

Commit 94dd012

Browse files
committed
df(windows): fix Avail/Use% by using number_of_free_clusters for bavail (#7461)
1 parent b4423b9 commit 94dd012

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

src/uucore/src/lib/features/fsext.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -683,7 +683,9 @@ impl FsUsage {
683683
// Total number of free blocks.
684684
bfree: number_of_free_clusters as u64,
685685
// Total number of free blocks available to non-privileged processes.
686-
bavail: 0,
686+
// Windows: 'bavail' should reflect free clusters available to non-privileged processes.
687+
// See: https://github.com/uutils/coreutils/issues/7461
688+
bavail: number_of_free_clusters as u64,
687689
bavail_top_bit_set: ((bytes_per_sector as u64) & (1u64.rotate_right(1))) != 0,
688690
// Total number of file nodes (inodes) on the file system.
689691
files: 0, // Not available on windows

tests/by-util/test_df.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -973,3 +973,23 @@ fn test_nonexistent_file() {
973973
.stderr_is("df: does-not-exist: No such file or directory\n")
974974
.stdout_is("File\n.\n");
975975
}
976+
977+
#[test]
978+
#[cfg(target_os = "windows")]
979+
fn test_windows_avail_column_not_zero() {
980+
// Regression test for issue #7461: Avail column should not be 0 on Windows
981+
let output = new_ucmd!()
982+
.args(&["--output=avail"])
983+
.succeeds()
984+
.stdout_str_lossy();
985+
986+
let lines: Vec<&str> = output.lines().skip(1).collect();
987+
assert!(!lines.is_empty(), "Should have at least one filesystem");
988+
989+
// At least one filesystem should have non-zero avail
990+
let has_non_zero = lines.iter().any(|line| {
991+
line.trim().parse::<u64>().map(|v| v > 0).unwrap_or(false)
992+
});
993+
994+
assert!(has_non_zero, "At least one filesystem should have non-zero available space");
995+
}

0 commit comments

Comments
 (0)