new subnets, interface addressing
[unix-history] / usr / src / sbin / clri / clri.c
... / ...
CommitLineData
1static char sccsid[] = "@(#)clri.c 2.2 %G%";
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)
21struct ino {
22 char junk[ISIZE];
23};
24struct ino buf[NI];
25
26union {
27 char dummy[SBSIZE];
28 struct fs sblk;
29} sb_un;
30#define sblock sb_un.sblk
31
32int status;
33
34main(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
97isnumber(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}