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