static char *sccsid
= "@(#)df.c 4.7 (Berkeley) %G%";
#define NFS 20 /* Max number of filesystems */
while (argc
>= 1 && argv
[1][0]=='-') {
fprintf(stderr
, "usage: df [ -i ] [ -l ] [ filsys... ]\n");
if ((i
=open("/etc/mtab", 0)) >= 0) {
read(i
, mtab
, sizeof mtab
); /* Probably returns short */
printf("Filesystem Mounted on kbytes\t used\t free");
printf("\tiused\tifree\t%%iused");
while( (fsp
= getfsent()) != 0){
if ( (strcmp(fsp
->fs_type
, FSTAB_RW
) != 0)
&&(strcmp(fsp
->fs_type
, FSTAB_RO
) != 0) )
strcpy(root
, fsp
->fs_spec
);
if(stat(file
, &stbuf
) == 0 && (stbuf
.st_mode
&S_IFMT
) != S_IFCHR
&& (stbuf
.st_mode
&S_IFMT
) != S_IFBLK
) {
int mt
= open("/etc/mtab", 0), len
;
char *str
= "/dev/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
while((len
= read(mt
, mtab
, 32)) == 32) {
if(stat(str
, &mstbuf
) == 0 && mstbuf
.st_rdev
== stbuf
.st_dev
) {
fprintf(stderr
, "%s: mounted on unknown device\n", file
);
fprintf(stderr
,"cannot open %s\n", file
);
bread(1L, (char *)&sblock
, sizeof(sblock
));
printf("%-12.12s%s", file
, mp
= mpath(file
));
blocks
= (long) sblock
.s_fsize
- (long)sblock
.s_isize
;
printf("\t%6ld", blocks
);
printf("\t%6ld", free
=hardway
);
blocks
== 0 ? 0.0 : (double) used
/ (double)blocks
* 100.0);
int inodes
= (sblock
.s_isize
- 2) * INOPB
;
used
= inodes
- sblock
.s_tinode
;
printf("\t%5ld\t%5ld\t%5.0f%%", used
, sblock
.s_tinode
,
inodes
== 0 ? 0.0 : (double)used
/(double)inodes
*100.0);
printf("bad free count, b=%D\n", blkno
);
if(b
<sblock
.s_isize
|| b
>=sblock
.s_fsize
) {
printf("bad free block (%D)\n", b
);
if(sblock
.s_nfree
<= 0) {
bread(b
, (char *)&buf
, sizeof(buf
));
sblock
.s_nfree
= buf
.df_nfree
;
sblock
.s_free
[i
] = buf
.df_free
[i
];
lseek(fi
, bno
<<BSHIFT
, 0);
if((n
=read(fi
, buf
, cnt
)) != cnt
) {
printf("\nread error bno = %ld\n", bno
);
printf("count = %d; errno = %d\n", n
, errno
);
* Given a name like /dev/rrp0h, returns the mounted path, like /usr.
if (eq(file
, mtab
[i
].spec
))
if (strncmp(f1
, "/dev/", 5) == 0)
if (strncmp(f2
, "/dev/", 5) == 0)
if (*f1
== 'r' && strcmp(f1
+1, f2
) == 0)
if (*f2
== 'r' && strcmp(f1
, f2
+1) == 0)
if (*f1
== 'r' && *f2
== 'r' && strcmp(f1
+1, f2
+1) == 0)