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