1 static char sccsid[] = "@(#)clri.c 2.2 04/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 } 107