|
|
1.1 root 1: #include <fio.h>
2: #include <libc.h>
3:
4: main(argc, argv)
5: char **argv;
6: {
7: register n, c, k;
8: int len, fd, cd;
9: char *b1, *b2, *p;
10:
11: if(argc < 2){
12: Fprint(2, "Usage: tstrd file\n");
13: exit(1);
14: }
15: len = flen(argv[1]);
16: if((fd = open(argv[1], 0)) < 0){
17: perror(argv[1]);
18: exit(1);
19: }
20: if((b1 = malloc(len)) == 0){
21: Fprint(2, "malloc(%d) failed\n", len);
22: exit(1);
23: }
24: if(read(fd, b1, len) != len){
25: perror("read");
26: exit(1);
27: }
28: lseek(fd, 0L, 0);
29: if((b2 = malloc(len)) == 0){
30: Fprint(2, "malloc(%d) failed\n", len);
31: exit(1);
32: }
33: for(p = b2, cd = 0; cd < len;){
34: n = 1000*nrand(6) + nrand(199);
35: if(n > len-cd) n = len-cd;
36: Fprint(1, "%d getchars\n", n);
37: cd += n;
38: while(n--)
39: *p++ = Fgetc(fd);
40: if(cd == len)
41: continue;
42: n = 1000*nrand(12) + nrand(199);
43: if(n > len-cd) n = len-cd;
44: cd += n;
45: Fprint(1, "%d read\n", n);
46: if(Fread(fd, p, (long)n) != (long)n) break;
47: p += n;
48: }
49: done:
50: if(memcmp(b1, b2, len)){
51: Fprint(2, "memcmp failed!\n");
52: exit(1);
53: }
54: Fprint(2, "tstrd: %d bytes, succeeded\n", len);
55: exit(0);
56: }
57:
58: #include <sys/types.h>
59: #include <sys/stat.h>
60:
61: flen(s)
62: char *s;
63: {
64: struct stat sb;
65: int n;
66:
67: if(stat(s, &sb) < 0){
68: perror(s);
69: exit(1);
70: }
71: n = sb.st_size;
72: if(sizeof(int) == 2)
73: n &= 0x7FFF;
74: return(n);
75: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.