|
|
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.