15341Smckusick /* Copyright (c) 1981 Regents of the University of California */ 25341Smckusick 3*5378Smckusic static char sccsid[] = "@(#)clri.c 1.3 01/12/82"; 45341Smckusick 55345Smckusic /* static char *sccsid = "@(#)clri.c 4.1 (Berkeley) 10/1/80"; */ 65341Smckusick /* 75341Smckusick * clri filsys inumber ... 85341Smckusick */ 95341Smckusick 105345Smckusic #include "../h/param.h" 115345Smckusic #include "../h/inode.h" 125345Smckusic #include "../h/fs.h" 135341Smckusick 145341Smckusick #define ISIZE (sizeof(struct dinode)) 155345Smckusic #define NI (MAXBSIZE/ISIZE) 165345Smckusic struct ino { 175341Smckusick char junk[ISIZE]; 185341Smckusick }; 195341Smckusick struct ino buf[NI]; 205345Smckusic 215345Smckusic union { 225345Smckusic char dummy[SBSIZE]; 235345Smckusic struct fs sblk; 245345Smckusic } sb_un; 255345Smckusic #define sblock sb_un.sblk 265345Smckusic 275341Smckusick int status; 285341Smckusick 295341Smckusick main(argc, argv) 305345Smckusic int argc; 315345Smckusic char *argv[]; 325341Smckusick { 335341Smckusick register i, f; 345341Smckusick unsigned n; 355341Smckusick int j, k; 365341Smckusick long off; 375341Smckusick 385345Smckusic if (argc < 3) { 395341Smckusick printf("usage: clri filsys inumber ...\n"); 405341Smckusick exit(4); 415341Smckusick } 425341Smckusick f = open(argv[1], 2); 435345Smckusic if (f < 0) { 445341Smckusick printf("cannot open %s\n", argv[1]); 455341Smckusick exit(4); 465341Smckusick } 475345Smckusic lseek(f, SBLOCK * DEV_BSIZE, 0); 485345Smckusic if (read(f, &sblock, SBSIZE) != SBSIZE) { 495345Smckusic printf("cannot read %s\n", argv[1]); 505345Smckusic exit(4); 515345Smckusic } 525345Smckusic for (i = 2; i < argc; i++) { 535345Smckusic if (!isnumber(argv[i])) { 545341Smckusick printf("%s: is not a number\n", argv[i]); 555341Smckusick status = 1; 565341Smckusick continue; 575341Smckusick } 585341Smckusick n = atoi(argv[i]); 595345Smckusic if (n == 0) { 605341Smckusick printf("%s: is zero\n", argv[i]); 615341Smckusick status = 1; 625341Smckusick continue; 635341Smckusick } 64*5378Smckusic off = fsbtodb(&sblock, itod(&sblock, n)) * DEV_BSIZE; 655341Smckusick lseek(f, off, 0); 665345Smckusic if (read(f, (char *)buf, sblock.fs_bsize) != sblock.fs_bsize) { 675341Smckusick printf("%s: read error\n", argv[i]); 685341Smckusick status = 1; 695341Smckusick } 705341Smckusick } 715345Smckusic if (status) 725341Smckusick exit(status); 735345Smckusic for (i = 2; i < argc; i++) { 745341Smckusick n = atoi(argv[i]); 755341Smckusick printf("clearing %u\n", n); 76*5378Smckusic off = fsbtodb(&sblock, itod(&sblock, n)) * DEV_BSIZE; 775341Smckusick lseek(f, off, 0); 785345Smckusic read(f, (char *)buf, sblock.fs_bsize); 79*5378Smckusic j = itoo(&sblock, n); 805345Smckusic for (k = 0; k < ISIZE; k++) 815341Smckusick buf[j].junk[k] = 0; 825341Smckusick lseek(f, off, 0); 835345Smckusic write(f, (char *)buf, sblock.fs_bsize); 845341Smckusick } 855341Smckusick exit(status); 865341Smckusick } 875341Smckusick 885341Smckusick isnumber(s) 895345Smckusic char *s; 905341Smckusick { 915341Smckusick register c; 925341Smckusick 935341Smckusick while(c = *s++) 945345Smckusic if (c < '0' || c > '9') 955341Smckusick return(0); 965341Smckusick return(1); 975341Smckusick } 98