/* * clri filsys inumber ... */ #include <sys/types.h> #include <sys/ino.h> #define ISIZE (sizeof(struct dinode)) #define BSIZE 512 #define NI (BSIZE/ISIZE) struct ino { char junk[ISIZE]; }; struct ino buf[NI]; int status; main(argc, argv) char *argv[]; { register i, f; unsigned n; int j, k; long off; if(argc < 3) { printf("usage: clri filsys inumber ...\n"); exit(4); } f = open(argv[1], 2); if(f < 0) { printf("cannot open %s\n", argv[1]); exit(4); } for(i=2; i<argc; i++) { if(!isnumber(argv[i])) { printf("%s: is not a number\n", argv[i]); status = 1; continue; } n = atoi(argv[i]); if(n == 0) { printf("%s: is zero\n", argv[i]); status = 1; continue; } off = ((n-1)/NI + 2) * (long)512; lseek(f, off, 0); if(read(f, (char *)buf, BSIZE) != BSIZE) { printf("%s: read error\n", argv[i]); status = 1; } } if(status) exit(status); for(i=2; i<argc; i++) { n = atoi(argv[i]); printf("clearing %u\n", n); off = ((n-1)/NI + 2) * (long)512; lseek(f, off, 0); read(f, (char *)buf, BSIZE); j = (n-1)%NI; for(k=0; k<ISIZE; k++) buf[j].junk[k] = 0; lseek(f, off, 0); write(f, (char *)buf, BSIZE); } exit(status); } isnumber(s) char *s; { register c; while(c = *s++) if(c < '0' || c > '9') return(0); return(1); }