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