Annotation of 43BSD/etc/clri.c, revision 1.1.1.1

1.1       root        1: static char sccsid[] = "@(#)clri.c 2.2 4/11/82";
                      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: 
                     34: main(argc, argv)
                     35:        int argc;
                     36:        char *argv[];
                     37: {
                     38:        register i, f;
                     39:        unsigned n;
                     40:        int j, k;
                     41:        long off;
                     42: 
                     43:        if (argc < 3) {
                     44:                printf("usage: clri filsys inumber ...\n");
                     45:                exit(4);
                     46:        }
                     47:        f = open(argv[1], 2);
                     48:        if (f < 0) {
                     49:                printf("cannot open %s\n", argv[1]);
                     50:                exit(4);
                     51:        }
                     52:        lseek(f, SBLOCK * DEV_BSIZE, 0);
                     53:        if (read(f, &sblock, SBSIZE) != SBSIZE) {
                     54:                printf("cannot read %s\n", argv[1]);
                     55:                exit(4);
                     56:        }
                     57:        if (sblock.fs_magic != FS_MAGIC) {
                     58:                printf("bad super block magic number\n");
                     59:                exit(4);
                     60:        }
                     61:        for (i = 2; i < argc; i++) {
                     62:                if (!isnumber(argv[i])) {
                     63:                        printf("%s: is not a number\n", argv[i]);
                     64:                        status = 1;
                     65:                        continue;
                     66:                }
                     67:                n = atoi(argv[i]);
                     68:                if (n == 0) {
                     69:                        printf("%s: is zero\n", argv[i]);
                     70:                        status = 1;
                     71:                        continue;
                     72:                }
                     73:                off = fsbtodb(&sblock, itod(&sblock, n)) * DEV_BSIZE;
                     74:                lseek(f, off, 0);
                     75:                if (read(f, (char *)buf, sblock.fs_bsize) != sblock.fs_bsize) {
                     76:                        printf("%s: read error\n", argv[i]);
                     77:                        status = 1;
                     78:                }
                     79:        }
                     80:        if (status)
                     81:                exit(status);
                     82:        for (i = 2; i < argc; i++) {
                     83:                n = atoi(argv[i]);
                     84:                printf("clearing %u\n", n);
                     85:                off = fsbtodb(&sblock, itod(&sblock, n)) * DEV_BSIZE;
                     86:                lseek(f, off, 0);
                     87:                read(f, (char *)buf, sblock.fs_bsize);
                     88:                j = itoo(&sblock, n);
                     89:                for (k = 0; k < ISIZE; k++)
                     90:                        buf[j].junk[k] = 0;
                     91:                lseek(f, off, 0);
                     92:                write(f, (char *)buf, sblock.fs_bsize);
                     93:        }
                     94:        exit(status);
                     95: }
                     96: 
                     97: isnumber(s)
                     98:        char *s;
                     99: {
                    100:        register c;
                    101: 
                    102:        while(c = *s++)
                    103:                if (c < '0' || c > '9')
                    104:                        return(0);
                    105:        return(1);
                    106: }

unix.superglobalmegacorp.com

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