Annotation of 43BSDTahoe/etc/clri.c, revision 1.1

1.1     ! root        1: static char sccsid[] = "@(#)clri.c 2.3 2/23/87";
        !             2: 
        !             3: /* static char *sccsid = "@(#)clri.c   4.1 (Berkeley) 10/1/80"; */
        !             4: 
        !             5: /*
        !             6:  * clri filsys inumber ...
        !             7:  */
        !             8: 
        !             9: #ifndef SIMFS
        !            10: #include <sys/param.h>
        !            11: #include <sys/inode.h>
        !            12: #include <sys/fs.h>
        !            13: #else
        !            14: #include "../h/param.h"
        !            15: #include "../h/inode.h"
        !            16: #include "../h/fs.h"
        !            17: #endif
        !            18: 
        !            19: #define ISIZE  (sizeof(struct dinode))
        !            20: #define        NI      (MAXBSIZE/ISIZE)
        !            21: struct ino {
        !            22:        char    junk[ISIZE];
        !            23: };
        !            24: struct ino     buf[NI];
        !            25: 
        !            26: union {
        !            27:        char            dummy[SBSIZE];
        !            28:        struct fs       sblk;
        !            29: } sb_un;
        !            30: #define sblock sb_un.sblk
        !            31: 
        !            32: int    status;
        !            33: long   dev_bsize = 1;
        !            34: 
        !            35: main(argc, argv)
        !            36:        int argc;
        !            37:        char *argv[];
        !            38: {
        !            39:        register i, f;
        !            40:        unsigned n;
        !            41:        int j, k;
        !            42:        long off;
        !            43: 
        !            44:        if (argc < 3) {
        !            45:                printf("usage: clri filsys inumber ...\n");
        !            46:                exit(4);
        !            47:        }
        !            48:        f = open(argv[1], 2);
        !            49:        if (f < 0) {
        !            50:                printf("cannot open %s\n", argv[1]);
        !            51:                exit(4);
        !            52:        }
        !            53:        lseek(f, SBOFF, 0);
        !            54:        if (read(f, &sblock, SBSIZE) != SBSIZE) {
        !            55:                printf("cannot read %s\n", argv[1]);
        !            56:                exit(4);
        !            57:        }
        !            58:        if (sblock.fs_magic != FS_MAGIC) {
        !            59:                printf("bad super block magic number\n");
        !            60:                exit(4);
        !            61:        }
        !            62:        dev_bsize = sblock.fs_fsize / fsbtodb(&sblock, 1);
        !            63:        for (i = 2; i < argc; i++) {
        !            64:                if (!isnumber(argv[i])) {
        !            65:                        printf("%s: is not a number\n", argv[i]);
        !            66:                        status = 1;
        !            67:                        continue;
        !            68:                }
        !            69:                n = atoi(argv[i]);
        !            70:                if (n == 0) {
        !            71:                        printf("%s: is zero\n", argv[i]);
        !            72:                        status = 1;
        !            73:                        continue;
        !            74:                }
        !            75:                off = fsbtodb(&sblock, itod(&sblock, n)) * dev_bsize;
        !            76:                lseek(f, off, 0);
        !            77:                if (read(f, (char *)buf, sblock.fs_bsize) != sblock.fs_bsize) {
        !            78:                        printf("%s: read error\n", argv[i]);
        !            79:                        status = 1;
        !            80:                }
        !            81:        }
        !            82:        if (status)
        !            83:                exit(status);
        !            84:        for (i = 2; i < argc; i++) {
        !            85:                n = atoi(argv[i]);
        !            86:                printf("clearing %u\n", n);
        !            87:                off = fsbtodb(&sblock, itod(&sblock, n)) * dev_bsize;
        !            88:                lseek(f, off, 0);
        !            89:                read(f, (char *)buf, sblock.fs_bsize);
        !            90:                j = itoo(&sblock, n);
        !            91:                for (k = 0; k < ISIZE; k++)
        !            92:                        buf[j].junk[k] = 0;
        !            93:                lseek(f, off, 0);
        !            94:                write(f, (char *)buf, sblock.fs_bsize);
        !            95:        }
        !            96:        exit(status);
        !            97: }
        !            98: 
        !            99: isnumber(s)
        !           100:        char *s;
        !           101: {
        !           102:        register c;
        !           103: 
        !           104:        while(c = *s++)
        !           105:                if (c < '0' || c > '9')
        !           106:                        return(0);
        !           107:        return(1);
        !           108: }

unix.superglobalmegacorp.com

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