|
|
1.1 ! root 1: static char *sccsid = "@(#)clri.c 4.1 (Berkeley) 10/1/80"; ! 2: /* ! 3: * clri filsys inumber ... ! 4: */ ! 5: ! 6: #include <sys/param.h> ! 7: #include <sys/ino.h> ! 8: ! 9: #define ISIZE (sizeof(struct dinode)) ! 10: #define NI (BSIZE/ISIZE) ! 11: struct ino ! 12: { ! 13: char junk[ISIZE]; ! 14: }; ! 15: struct ino buf[NI]; ! 16: int status; ! 17: ! 18: main(argc, argv) ! 19: char *argv[]; ! 20: { ! 21: register i, f; ! 22: unsigned n; ! 23: int j, k; ! 24: long off; ! 25: ! 26: if(argc < 3) { ! 27: printf("usage: clri filsys inumber ...\n"); ! 28: exit(4); ! 29: } ! 30: f = open(argv[1], 2); ! 31: if(f < 0) { ! 32: printf("cannot open %s\n", argv[1]); ! 33: exit(4); ! 34: } ! 35: for(i=2; i<argc; i++) { ! 36: if(!isnumber(argv[i])) { ! 37: printf("%s: is not a number\n", argv[i]); ! 38: status = 1; ! 39: continue; ! 40: } ! 41: n = atoi(argv[i]); ! 42: if(n == 0) { ! 43: printf("%s: is zero\n", argv[i]); ! 44: status = 1; ! 45: continue; ! 46: } ! 47: off = itod(n) * BSIZE; ! 48: lseek(f, off, 0); ! 49: if(read(f, (char *)buf, BSIZE) != BSIZE) { ! 50: printf("%s: read error\n", argv[i]); ! 51: status = 1; ! 52: } ! 53: } ! 54: if(status) ! 55: exit(status); ! 56: for(i=2; i<argc; i++) { ! 57: n = atoi(argv[i]); ! 58: printf("clearing %u\n", n); ! 59: off = itod(n) * BSIZE; ! 60: lseek(f, off, 0); ! 61: read(f, (char *)buf, BSIZE); ! 62: j = itoo(n); ! 63: for(k=0; k<ISIZE; k++) ! 64: buf[j].junk[k] = 0; ! 65: lseek(f, off, 0); ! 66: write(f, (char *)buf, BSIZE); ! 67: } ! 68: exit(status); ! 69: } ! 70: ! 71: isnumber(s) ! 72: char *s; ! 73: { ! 74: register c; ! 75: ! 76: while(c = *s++) ! 77: if(c < '0' || c > '9') ! 78: return(0); ! 79: return(1); ! 80: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.