Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/uucore/src/lib/features/fsext.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
23 changes: 23 additions & 0 deletions tests/by-util/test_df.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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::<u64>().map(|v| v > 0).unwrap_or(false));

assert!(
has_non_zero,
"At least one filesystem should have non-zero available space"
);
}
Loading