Annotation of 3BSD/cmd/df.c, revision 1.1.1.1

1.1       root        1: #include <stdio.h>
                      2: #include <sys/param.h>
                      3: #include <sys/filsys.h>
                      4: #include <sys/fblk.h>
                      5: 
                      6: daddr_t        blkno   = 1;
                      7: char   *dargv[] = {
                      8:        0,
                      9:        "/dev/rp0a",
                     10:        "/dev/rp2a",
                     11:        "/dev/rp2h",
                     12:        0
                     13: };
                     14: 
                     15: 
                     16: struct filsys sblock;
                     17: 
                     18: int    fi;
                     19: daddr_t        alloc();
                     20: 
                     21: main(argc, argv)
                     22: char **argv;
                     23: {
                     24:        int i;
                     25: 
                     26:        if(argc <= 1) {
                     27:                for(argc = 1; dargv[argc]; argc++);
                     28:                argv = dargv;
                     29:        }
                     30: 
                     31:        for(i=1; i<argc; i++) {
                     32:                dfree(argv[i]);
                     33:        }
                     34: }
                     35: 
                     36: dfree(file)
                     37: char *file;
                     38: {
                     39:        daddr_t i;
                     40: 
                     41:        fi = open(file, 0);
                     42:        if(fi < 0) {
                     43:                fprintf(stderr,"cannot open %s\n", file);
                     44:                return;
                     45:        }
                     46:        sync();
                     47:        bread(1L, (char *)&sblock, sizeof(sblock));
                     48:        i = 0;
                     49:        while(alloc())
                     50:                i++;
                     51:        printf("%s %D\n", file, i);
                     52:        close(fi);
                     53: }
                     54: 
                     55: daddr_t
                     56: alloc()
                     57: {
                     58:        int i;
                     59:        daddr_t b;
                     60:        struct fblk buf;
                     61: 
                     62:        i = --sblock.s_nfree;
                     63:        if(i<0 || i>=NICFREE) {
                     64:                printf("bad free count, b=%D\n", blkno);
                     65:                return(0);
                     66:        }
                     67:        b = sblock.s_free[i];
                     68:        if(b == 0)
                     69:                return(0);
                     70:        if(b<sblock.s_isize || b>=sblock.s_fsize) {
                     71:                printf("bad free block (%D)\n", b);
                     72:                return(0);
                     73:        }
                     74:        if(sblock.s_nfree <= 0) {
                     75:                bread(b, (char *)&buf, sizeof(buf));
                     76:                blkno = b;
                     77:                sblock.s_nfree = buf.df_nfree;
                     78:                for(i=0; i<NICFREE; i++)
                     79:                        sblock.s_free[i] = buf.df_free[i];
                     80:        }
                     81:        return(b);
                     82: }
                     83: 
                     84: bread(bno, buf, cnt)
                     85: daddr_t bno;
                     86: char *buf;
                     87: {
                     88:        int n;
                     89:        extern errno;
                     90: 
                     91:        lseek(fi, bno<<BSHIFT, 0);
                     92:        if((n=read(fi, buf, cnt)) != cnt) {
                     93:                printf("read error %D\n", bno);
                     94:                printf("count = %d; errno = %d\n", n, errno);
                     95:                exit(0);
                     96:        }
                     97: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.