|
|
1.1 ! root 1: /* ! 2: * hideblock filesystem(not raw) file b1 b2 ... ! 3: * -- puts blocks in named file in file system. ! 4: */ ! 5: ! 6: #include <stdio.h> ! 7: #include <sys/param.h> ! 8: #include <sys/ino.h> ! 9: #include <sys/stat.h> ! 10: ! 11: #ifdef BITFS ! 12: #define Bsize BSIZE(dev) ! 13: #define Inopb INOPB(dev) ! 14: #else ! 15: #define Bsize BSIZE ! 16: #define Inopb INOPB ! 17: #endif ! 18: ! 19: int fd; ! 20: struct dinode di; ! 21: ino_t inode; ! 22: char cntflag; ! 23: long count; ! 24: long size; ! 25: dev_t dev; ! 26: int writing; ! 27: ! 28: main(argc,argv) ! 29: char **argv; ! 30: { ! 31: long pos; ! 32: int i,j; ! 33: long addr[13]; ! 34: char *file; ! 35: struct stat s; ! 36: ! 37: if(argc<3) { ! 38: printf("usage: %s non-raw-fs file b1 b2 ... (512)\n", argv[0]); ! 39: exit(1); ! 40: } ! 41: writing = argc>3; ! 42: if ((fd=open(argv[1], writing?2:0)) < 0) { ! 43: perror(argv[1]); ! 44: printf("%s couldn't open %s\n", argv[0], argv[1]); ! 45: exit(1); ! 46: } ! 47: if (stat(argv[2], &s) < 0) { ! 48: printf("%s: %s must exist\n", argv[0], argv[2]); ! 49: exit(1); ! 50: } ! 51: if (s.st_size != 0 && argc>3) { ! 52: printf("%s: %s must be 0 length\n", argv[0], argv[2]); ! 53: exit(1); ! 54: } ! 55: inode = s.st_ino; ! 56: dev = s.st_dev; ! 57: pos = ((long)inode-1)/Inopb*Bsize+((inode-1)%Inopb)*sizeof(struct dinode); ! 58: pos += 2*Bsize; ! 59: lseek(fd, pos, 0); ! 60: bread(fd, &di, sizeof(di)); ! 61: l3tol(addr, di.di_addr, 13); ! 62: for (i = 0; i < 10; i++) { ! 63: if (addr[i]) ! 64: printf(" %ld", addr[i]*(Bsize/512)); ! 65: else ! 66: break; ! 67: } ! 68: argc -= 2; ! 69: argv += 2; ! 70: while (argc > 1) { ! 71: if (i >= 10) { ! 72: printf("\nhideblock: at most 10 blocks\n"); ! 73: break; ! 74: } ! 75: addr[i] = atol(argv[1])/(Bsize/512); ! 76: printf(" %ld", addr[i]*(Bsize/512)); ! 77: i++; ! 78: argc--; ! 79: argv++; ! 80: } ! 81: printf("\n"); ! 82: if (writing) { ! 83: ltol3(di.di_addr, addr, 13); ! 84: lseek(fd, pos, 0); ! 85: bwrite(fd, &di, sizeof(di)); ! 86: } ! 87: return(0); ! 88: } ! 89: ! 90: bread(f, b, c) ! 91: char *b; ! 92: { ! 93: register n; ! 94: ! 95: n = read(f, b, c); ! 96: if (n!=c) ! 97: printf("bad read on %d: %d\n", f, n); ! 98: } ! 99: ! 100: bwrite(f, b, c) ! 101: char *b; ! 102: { ! 103: register n; ! 104: ! 105: n = write(f, b, c); ! 106: if (n!=c) ! 107: printf("bad write on %d: %d\n", f, n); ! 108: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.