Bell 32V development
authorTom London <tbl@research.uucp>
Mon, 11 Dec 1978 00:49:23 +0000 (19:49 -0500)
committerTom London <tbl@research.uucp>
Mon, 11 Dec 1978 00:49:23 +0000 (19:49 -0500)
Work on file usr/src/cmd/df.c

Co-Authored-By: John Reiser <jfr@research.uucp>
Synthesized-from: 32v

usr/src/cmd/df.c [new file with mode: 0644]

diff --git a/usr/src/cmd/df.c b/usr/src/cmd/df.c
new file mode 100644 (file)
index 0000000..8d534f1
--- /dev/null
@@ -0,0 +1,96 @@
+#include <stdio.h>
+#include <sys/param.h>
+#include <sys/filsys.h>
+#include <sys/fblk.h>
+
+daddr_t        blkno   = 1;
+char   *dargv[] = {
+       0,
+       "/dev/rp0a",
+       "/dev/rp1g",
+       0
+};
+
+
+struct filsys sblock;
+
+int    fi;
+daddr_t        alloc();
+
+main(argc, argv)
+char **argv;
+{
+       int i;
+
+       if(argc <= 1) {
+               for(argc = 1; dargv[argc]; argc++);
+               argv = dargv;
+       }
+
+       for(i=1; i<argc; i++) {
+               dfree(argv[i]);
+       }
+}
+
+dfree(file)
+char *file;
+{
+       daddr_t i;
+
+       fi = open(file, 0);
+       if(fi < 0) {
+               fprintf(stderr,"cannot open %s\n", file);
+               return;
+       }
+       sync();
+       bread(1L, (char *)&sblock, sizeof(sblock));
+       i = 0;
+       while(alloc())
+               i++;
+       printf("%s %D\n", file, i);
+       close(fi);
+}
+
+daddr_t
+alloc()
+{
+       int i;
+       daddr_t b;
+       struct fblk buf;
+
+       i = --sblock.s_nfree;
+       if(i<0 || 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_isize || 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<NICFREE; i++)
+                       sblock.s_free[i] = buf.df_free[i];
+       }
+       return(b);
+}
+
+bread(bno, buf, cnt)
+daddr_t bno;
+char *buf;
+{
+       int n;
+       extern errno;
+
+       lseek(fi, bno<<BSHIFT, 0);
+       if((n=read(fi, buf, cnt)) != cnt) {
+               printf("read error %D\n", bno);
+               printf("count = %d; errno = %d\n", n, errno);
+               exit(0);
+       }
+}