xref: /csrg-svn/sbin/clri/clri.c (revision 5378)
15341Smckusick /* Copyright (c) 1981 Regents of the University of California */
25341Smckusick 
3*5378Smckusic static char sccsid[] = "@(#)clri.c 1.3 01/12/82";
45341Smckusick 
55345Smckusic /* static char *sccsid = "@(#)clri.c	4.1 (Berkeley) 10/1/80"; */
65341Smckusick /*
75341Smckusick  * clri filsys inumber ...
85341Smckusick  */
95341Smckusick 
105345Smckusic #include "../h/param.h"
115345Smckusic #include "../h/inode.h"
125345Smckusic #include "../h/fs.h"
135341Smckusick 
145341Smckusick #define ISIZE	(sizeof(struct dinode))
155345Smckusic #define	NI	(MAXBSIZE/ISIZE)
165345Smckusic struct	ino {
175341Smckusick 	char	junk[ISIZE];
185341Smckusick };
195341Smckusick struct	ino	buf[NI];
205345Smckusic 
215345Smckusic union {
225345Smckusic 	char		dummy[SBSIZE];
235345Smckusic 	struct fs	sblk;
245345Smckusic } sb_un;
255345Smckusic #define sblock sb_un.sblk
265345Smckusic 
275341Smckusick int	status;
285341Smckusick 
295341Smckusick main(argc, argv)
305345Smckusic 	int argc;
315345Smckusic 	char *argv[];
325341Smckusick {
335341Smckusick 	register i, f;
345341Smckusick 	unsigned n;
355341Smckusick 	int j, k;
365341Smckusick 	long off;
375341Smckusick 
385345Smckusic 	if (argc < 3) {
395341Smckusick 		printf("usage: clri filsys inumber ...\n");
405341Smckusick 		exit(4);
415341Smckusick 	}
425341Smckusick 	f = open(argv[1], 2);
435345Smckusic 	if (f < 0) {
445341Smckusick 		printf("cannot open %s\n", argv[1]);
455341Smckusick 		exit(4);
465341Smckusick 	}
475345Smckusic 	lseek(f, SBLOCK * DEV_BSIZE, 0);
485345Smckusic 	if (read(f, &sblock, SBSIZE) != SBSIZE) {
495345Smckusic 		printf("cannot read %s\n", argv[1]);
505345Smckusic 		exit(4);
515345Smckusic 	}
525345Smckusic 	for (i = 2; i < argc; i++) {
535345Smckusic 		if (!isnumber(argv[i])) {
545341Smckusick 			printf("%s: is not a number\n", argv[i]);
555341Smckusick 			status = 1;
565341Smckusick 			continue;
575341Smckusick 		}
585341Smckusick 		n = atoi(argv[i]);
595345Smckusic 		if (n == 0) {
605341Smckusick 			printf("%s: is zero\n", argv[i]);
615341Smckusick 			status = 1;
625341Smckusick 			continue;
635341Smckusick 		}
64*5378Smckusic 		off = fsbtodb(&sblock, itod(&sblock, n)) * DEV_BSIZE;
655341Smckusick 		lseek(f, off, 0);
665345Smckusic 		if (read(f, (char *)buf, sblock.fs_bsize) != sblock.fs_bsize) {
675341Smckusick 			printf("%s: read error\n", argv[i]);
685341Smckusick 			status = 1;
695341Smckusick 		}
705341Smckusick 	}
715345Smckusic 	if (status)
725341Smckusick 		exit(status);
735345Smckusic 	for (i = 2; i < argc; i++) {
745341Smckusick 		n = atoi(argv[i]);
755341Smckusick 		printf("clearing %u\n", n);
76*5378Smckusic 		off = fsbtodb(&sblock, itod(&sblock, n)) * DEV_BSIZE;
775341Smckusick 		lseek(f, off, 0);
785345Smckusic 		read(f, (char *)buf, sblock.fs_bsize);
79*5378Smckusic 		j = itoo(&sblock, n);
805345Smckusic 		for (k = 0; k < ISIZE; k++)
815341Smckusick 			buf[j].junk[k] = 0;
825341Smckusick 		lseek(f, off, 0);
835345Smckusic 		write(f, (char *)buf, sblock.fs_bsize);
845341Smckusick 	}
855341Smckusick 	exit(status);
865341Smckusick }
875341Smckusick 
885341Smckusick isnumber(s)
895345Smckusic 	char *s;
905341Smckusick {
915341Smckusick 	register c;
925341Smckusick 
935341Smckusick 	while(c = *s++)
945345Smckusic 		if (c < '0' || c > '9')
955341Smckusick 			return(0);
965341Smckusick 	return(1);
975341Smckusick }
98