|
|
1.1 root 1: static char sccsid[] = "@(#)clri.c 2.3 2/23/87";
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: long dev_bsize = 1;
34:
35: main(argc, argv)
36: int argc;
37: char *argv[];
38: {
39: register i, f;
40: unsigned n;
41: int j, k;
42: long off;
43:
44: if (argc < 3) {
45: printf("usage: clri filsys inumber ...\n");
46: exit(4);
47: }
48: f = open(argv[1], 2);
49: if (f < 0) {
50: printf("cannot open %s\n", argv[1]);
51: exit(4);
52: }
53: lseek(f, SBOFF, 0);
54: if (read(f, &sblock, SBSIZE) != SBSIZE) {
55: printf("cannot read %s\n", argv[1]);
56: exit(4);
57: }
58: if (sblock.fs_magic != FS_MAGIC) {
59: printf("bad super block magic number\n");
60: exit(4);
61: }
62: dev_bsize = sblock.fs_fsize / fsbtodb(&sblock, 1);
63: for (i = 2; i < argc; i++) {
64: if (!isnumber(argv[i])) {
65: printf("%s: is not a number\n", argv[i]);
66: status = 1;
67: continue;
68: }
69: n = atoi(argv[i]);
70: if (n == 0) {
71: printf("%s: is zero\n", argv[i]);
72: status = 1;
73: continue;
74: }
75: off = fsbtodb(&sblock, itod(&sblock, n)) * dev_bsize;
76: lseek(f, off, 0);
77: if (read(f, (char *)buf, sblock.fs_bsize) != sblock.fs_bsize) {
78: printf("%s: read error\n", argv[i]);
79: status = 1;
80: }
81: }
82: if (status)
83: exit(status);
84: for (i = 2; i < argc; i++) {
85: n = atoi(argv[i]);
86: printf("clearing %u\n", n);
87: off = fsbtodb(&sblock, itod(&sblock, n)) * dev_bsize;
88: lseek(f, off, 0);
89: read(f, (char *)buf, sblock.fs_bsize);
90: j = itoo(&sblock, n);
91: for (k = 0; k < ISIZE; k++)
92: buf[j].junk[k] = 0;
93: lseek(f, off, 0);
94: write(f, (char *)buf, sblock.fs_bsize);
95: }
96: exit(status);
97: }
98:
99: isnumber(s)
100: char *s;
101: {
102: register c;
103:
104: while(c = *s++)
105: if (c < '0' || c > '9')
106: return(0);
107: return(1);
108: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.