|
|
1.1 ! root 1: #include <fio.h> ! 2: #include <libc.h> ! 3: ! 4: #define TMP "/tmp/tstsk" ! 5: #define FN(x) (unsigned char)((x&0xFF)^(x/251)) ! 6: ! 7: main(argc, argv) ! 8: char **argv; ! 9: { ! 10: register n, c, k; ! 11: int len, fd, cd; ! 12: char *b1, *b2, *p; ! 13: ! 14: if(argc != 1){ ! 15: Fprint(2, "Usage: tstsk\n"); ! 16: exit(1); ! 17: } ! 18: len = 1000000; ! 19: if(sizeof(int) == 2) ! 20: len &= 0x7FFF; ! 21: if((fd = creat(TMP, 0666)) < 0){ ! 22: perror(TMP); ! 23: exit(1); ! 24: } ! 25: close(fd); ! 26: if((fd = open(TMP, 2)) < 0){ ! 27: perror(TMP); ! 28: exit(1); ! 29: } ! 30: unlink(TMP); ! 31: if((b2 = malloc(len)) == 0){ ! 32: Fprint(2, "malloc(%d) failed\n", len); ! 33: exit(1); ! 34: } ! 35: for(n = 0, p = b2; n < len; n++) ! 36: *p++ = FN(n); ! 37: if(write(fd, b2, len) != len){ ! 38: perror("write"); ! 39: exit(1); ! 40: } ! 41: lseek(fd, 0L, 0); ! 42: Finit(fd, (char *)0); ! 43: for(n = 0; n < 500; n++){ ! 44: k = nrand(len); ! 45: c = nrand(sizeof(Fbuffer))+100; ! 46: if(k+c > len) c = len-k; ! 47: test(fd, k, c, n); ! 48: } ! 49: done: ! 50: Fprint(2, "tstsk: %d bytes, %d seeks, succeeded\n", len, n); ! 51: exit(0); ! 52: } ! 53: ! 54: test(fd, off, n, count) ! 55: { ! 56: long offset; ! 57: int c; ! 58: ! 59: offset = off; ! 60: if(Fseek(fd, offset, 0) != offset){ ! 61: fprint(2, "fseek(%ld) != %ld!!\n", offset, offset); ! 62: exit(1); ! 63: } ! 64: while(n-- > 0){ ! 65: if((c = Fgetc(fd)) != FN(offset)){ ! 66: fprint(2, "tst %d: char mismatch; %ld: %x, expected %x\n", ! 67: count, offset, c, FN(offset)); ! 68: dumpfb(fd); ! 69: exit(1); ! 70: } ! 71: offset++; ! 72: } ! 73: } ! 74: ! 75: dumpfb(fd) ! 76: { ! 77: register Fbuffer *f = Ffb[fd]; ! 78: register unsigned char *c; ! 79: register long off; ! 80: int i; ! 81: ! 82: fprint(2, "buf@%ld: next=%ld end=%ld lnext=%ld buf=%ld offset=%ld\n", ! 83: f, f->next, f->end, f->lnext, f->buf, f->offset); ! 84: off = f->offset - (f->end - f->buf); ! 85: for(c = f->buf; c < &f->buf[64]; ){ ! 86: fprint(2, "%7ld:", off); ! 87: for(i = 0; i < 16; i++, off++) ! 88: fprint(2, " %2x", *c++); ! 89: fprint(2, "\n"); ! 90: } ! 91: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.