|
|
1.1 ! root 1: /* ! 2: * Clear inodes. ! 3: */ ! 4: #include <sys/filsys.h> ! 5: #include <sys/ino.h> ! 6: #include <canon.h> ! 7: #include <stdio.h> ! 8: ! 9: ! 10: union { ! 11: struct filsys filsys_; ! 12: struct dinode dinode_[INOPB]; ! 13: } buff; ! 14: #define fs buff.filsys_ ! 15: #define di buff.dinode_ ! 16: ! 17: unsigned isize; ! 18: ! 19: ! 20: main(argc, argv) ! 21: register char **argv; ! 22: { ! 23: register fd; ! 24: ! 25: if (argc < 3) ! 26: fatal("usage: clri dev ino ..."); ! 27: fd = open(*++argv, 2); ! 28: if (fd < 0) ! 29: fatal("can't open %s", *argv); ! 30: lseek(fd, (long)SUPERI*BSIZE, 0); ! 31: if (read(fd, (char *)&fs, sizeof fs) != sizeof fs) ! 32: fatal("superblock read error"); ! 33: isize = fs.s_isize; ! 34: canint(isize); ! 35: ! 36: while (*++argv) ! 37: clri(fd, atoi(*argv)); ! 38: ! 39: return (0); ! 40: } ! 41: ! 42: ! 43: clri(fd, ino) ! 44: register fd; ! 45: ino_t ino; ! 46: { ! 47: register bn; ! 48: ! 49: bn = iblockn(ino); ! 50: if (bn >= isize) ! 51: fatal("inode %u out of range", ino); ! 52: lseek(fd, (long)bn*BSIZE, 0); ! 53: if (read(fd, (char *)di, sizeof di) != sizeof di) ! 54: fatal("read error on inode %u", ino); ! 55: clear(&di[iblocko(ino)]); ! 56: lseek(fd, (long)bn*BSIZE, 0); ! 57: if (write(fd, (char *)di, sizeof di) != sizeof di) ! 58: fatal("write error on inode %u", ino); ! 59: } ! 60: ! 61: ! 62: clear(dp) ! 63: struct dinode *dp; ! 64: { ! 65: register char *p; ! 66: register i; ! 67: ! 68: p = dp; ! 69: i = sizeof *dp; ! 70: do { ! 71: *p++ = 0; ! 72: } while (--i); ! 73: } ! 74: ! 75: ! 76: fatal(arg0) ! 77: char *arg0; ! 78: { ! 79: ! 80: fprintf(stderr, "clri: %r\n", &arg0); ! 81: exit(1); ! 82: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.