Based on The Open Group Base Specifications Issue 6 IEEE Std 1003.1, our

current implementation of df(1) is does not properly format the output under
certain conditions. Right now -kP and -Pk are not the same thing. Further,
when we set the BLOCKSIZE environment variable, we use "1k" instead of "1024",
making the header display incorrectly.

To quote the specification:

"When both the -k and -P options are specified, the following header line
 shall be written (in the POSIX locale):

"Filesystem 1024-blocks Used Available Capacity Mounted on\n"

- If -P has been specified, check to make sure that -k has not already been
  specified, if so, simply break instead of clobbering the previous blocksize
- Use 1024 instead of 1k to make the header POSIX compliant

Reported by:	Andriy Gapon
Discussed with:	bde, ru
MFC after:	1 week
This commit is contained in:
Christian S.J. Peron 2006-09-20 20:55:02 +00:00
parent dec10b39fd
commit df464e4361
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=162483

View File

@ -93,7 +93,7 @@ imax(int a, int b)
return (a > b ? a : b);
}
static int aflag = 0, cflag, hflag, iflag, nflag;
static int aflag = 0, cflag, hflag, iflag, kflag, nflag;
static struct ufs_args mdev;
int
@ -123,6 +123,14 @@ main(int argc, char *argv[])
case 'b':
/* FALLTHROUGH */
case 'P':
/*
* POSIX specifically discusses the 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.
*/
if (kflag)
break;
putenv("BLOCKSIZE=512");
hflag = 0;
break;
@ -143,7 +151,8 @@ main(int argc, char *argv[])
iflag = 1;
break;
case 'k':
putenv("BLOCKSIZE=1k");
kflag++;
putenv("BLOCKSIZE=1024");
hflag = 0;
break;
case 'l':