df: Fix -k flag consistency with other BLOCKSIZE flags

This patch resolves inconsistent behavior between the -k option and
other related flags, including -P. Previously, using -k resulted in
output displayed in 1024-byte blocks, which did not align with the
behavior of similar options such as -m and -g, where output is shown in
1M-blocks and 1G-blocks respectively.

The updated implementation ensures that -k now correctly displays sizes
in 1K-blocks. In addition, the patch incorporates the POSIX requirement
that when both -k -P are specified, the block size must be explicitly
forced to 1024-blocks.

Together, these changes make the behavior of -k consistent, predictable,
and compliant with the standard.

Signed-off-by: Ankush Mondal <mondalankush9851@gmail.com>
Reviewed by: imp
Pull Request: https://github.com/freebsd/freebsd-src/pull/1906
This commit is contained in:
Ankush Mondal 2025-11-29 16:45:30 +05:30 committed by Warner Losh
parent 2727bdebb3
commit 5395471516

View file

@ -128,11 +128,12 @@ main(int argc, char *argv[])
/*
* POSIX specifically discusses the behavior of
* both -k and -P. It states that the blocksize should
* be set to 1024. Thus, if this occurs, simply break
* rather than clobbering the old blocksize.
* be set to 1024.
*/
if (kflag)
if (kflag) {
setenv("BLOCKSIZE", "1024", 1);
break;
}
setenv("BLOCKSIZE", "512", 1);
hflag = 0;
break;
@ -154,7 +155,7 @@ main(int argc, char *argv[])
break;
case 'k':
kflag++;
setenv("BLOCKSIZE", "1024", 1);
setenv("BLOCKSIZE", "1k", 1);
hflag = 0;
break;
case 'l':