#ifndef lint static char *sccsid = "@(#)df.c 4.6 (Berkeley) 7/8/81"; #endif #include #include #include #include #include #include #include /* * df */ #define NFS 20 /* Max number of filesystems */ struct { char path[32]; char spec[32]; } mtab[NFS]; char root[32]; char *mpath(); daddr_t blkno = 1; int lflag; int iflag; struct filsys sblock; int fi; daddr_t alloc(); main(argc, argv) register char **argv; { register i; while (argc >= 1 && argv[1][0]=='-') { switch(argv[1][1]) { case 'l': lflag++; break; case 'i': iflag++; break; default: fprintf(stderr, "usage: df [ -il ] [ filsys... ]\n"); exit(0); } argc--, argv++; } if ((i=open("/etc/mtab", 0)) >= 0) { read(i, (char *) mtab, sizeof mtab); /* Probably returns short */ close(i); } printf("Filesystem Mounted on kbytes\t used\t free"); if (lflag) printf("\thardway"); printf("\t%% used"); if (iflag) printf("\tiused\tifree\t%%iused"); putchar('\n'); if(argc <= 1) { struct fstab *fsp; if (setfsent() == 0) perror(FSTAB), exit(1); while( (fsp = getfsent()) != 0){ if ( (strcmp(fsp->fs_type, FSTAB_RW) != 0) &&(strcmp(fsp->fs_type, FSTAB_RO) != 0) ) continue; if (root[0] == 0) strcpy(root, fsp->fs_spec); dfree(fsp->fs_spec); } endfsent(); exit(0); } for(i=1; i=NICFREE) { printf("bad free count, b=%D\n", blkno); return(0); } b = sblock.s_free[i]; if(b == 0) return(0); if(b=sblock.s_fsize) { printf("bad free block (%D)\n", b); return(0); } if(sblock.s_nfree <= 0) { bread(b, (char *)&buf, sizeof(buf)); blkno = b; sblock.s_nfree = buf.df_nfree; for(i=0; i