1*6494Smckusick static char sccsid[] = "@(#)clri.c 2.1 04/08/82"; 25341Smckusick 3*6494Smckusick /* static char *sccsid = "@(#)clri.c 4.1 (Berkeley) 10/1/80"; */ 45341Smckusick 55341Smckusick /* 65341Smckusick * clri filsys inumber ... 75341Smckusick */ 85341Smckusick 9*6494Smckusick #ifndef SIMFS 10*6494Smckusick #include <sys/param.h> 11*6494Smckusick #include <sys/inode.h> 12*6494Smckusick #include <sys/fs.h> 13*6494Smckusick #else 145345Smckusic #include "../h/param.h" 155345Smckusic #include "../h/inode.h" 165345Smckusic #include "../h/fs.h" 17*6494Smckusick #endif 185341Smckusick 195341Smckusick #define ISIZE (sizeof(struct dinode)) 205345Smckusic #define NI (MAXBSIZE/ISIZE) 215345Smckusic struct ino { 225341Smckusick char junk[ISIZE]; 235341Smckusick }; 245341Smckusick struct ino buf[NI]; 255345Smckusic 265345Smckusic union { 275345Smckusic char dummy[SBSIZE]; 285345Smckusic struct fs sblk; 295345Smckusic } sb_un; 305345Smckusic #define sblock sb_un.sblk 315345Smckusic 325341Smckusick int status; 335341Smckusick 345341Smckusick main(argc, argv) 355345Smckusic int argc; 365345Smckusic char *argv[]; 375341Smckusick { 385341Smckusick register i, f; 395341Smckusick unsigned n; 405341Smckusick int j, k; 415341Smckusick long off; 425341Smckusick 435345Smckusic if (argc < 3) { 445341Smckusick printf("usage: clri filsys inumber ...\n"); 455341Smckusick exit(4); 465341Smckusick } 475341Smckusick f = open(argv[1], 2); 485345Smckusic if (f < 0) { 495341Smckusick printf("cannot open %s\n", argv[1]); 505341Smckusick exit(4); 515341Smckusick } 525345Smckusic lseek(f, SBLOCK * DEV_BSIZE, 0); 535345Smckusic if (read(f, &sblock, SBSIZE) != SBSIZE) { 545345Smckusic printf("cannot read %s\n", argv[1]); 555345Smckusic exit(4); 565345Smckusic } 575345Smckusic for (i = 2; i < argc; i++) { 585345Smckusic if (!isnumber(argv[i])) { 595341Smckusick printf("%s: is not a number\n", argv[i]); 605341Smckusick status = 1; 615341Smckusick continue; 625341Smckusick } 635341Smckusick n = atoi(argv[i]); 645345Smckusic if (n == 0) { 655341Smckusick printf("%s: is zero\n", argv[i]); 665341Smckusick status = 1; 675341Smckusick continue; 685341Smckusick } 695378Smckusic off = fsbtodb(&sblock, itod(&sblock, n)) * DEV_BSIZE; 705341Smckusick lseek(f, off, 0); 715345Smckusic if (read(f, (char *)buf, sblock.fs_bsize) != sblock.fs_bsize) { 725341Smckusick printf("%s: read error\n", argv[i]); 735341Smckusick status = 1; 745341Smckusick } 755341Smckusick } 765345Smckusic if (status) 775341Smckusick exit(status); 785345Smckusic for (i = 2; i < argc; i++) { 795341Smckusick n = atoi(argv[i]); 805341Smckusick printf("clearing %u\n", n); 815378Smckusic off = fsbtodb(&sblock, itod(&sblock, n)) * DEV_BSIZE; 825341Smckusick lseek(f, off, 0); 835345Smckusic read(f, (char *)buf, sblock.fs_bsize); 845378Smckusic j = itoo(&sblock, n); 855345Smckusic for (k = 0; k < ISIZE; k++) 865341Smckusick buf[j].junk[k] = 0; 875341Smckusick lseek(f, off, 0); 885345Smckusic write(f, (char *)buf, sblock.fs_bsize); 895341Smckusick } 905341Smckusick exit(status); 915341Smckusick } 925341Smckusick 935341Smckusick isnumber(s) 945345Smckusic char *s; 955341Smckusick { 965341Smckusick register c; 975341Smckusick 985341Smckusick while(c = *s++) 995345Smckusic if (c < '0' || c > '9') 1005341Smckusick return(0); 1015341Smckusick return(1); 1025341Smckusick } 103