V10/libc/fio/tstrd.c
#include <fio.h>
#include <libc.h>
main(argc, argv)
char **argv;
{
register n, c, k;
int len, fd, cd;
char *b1, *b2, *p;
if(argc < 2){
Fprint(2, "Usage: tstrd file\n");
exit(1);
}
len = flen(argv[1]);
if((fd = open(argv[1], 0)) < 0){
perror(argv[1]);
exit(1);
}
if((b1 = malloc(len)) == 0){
Fprint(2, "malloc(%d) failed\n", len);
exit(1);
}
if(read(fd, b1, len) != len){
perror("read");
exit(1);
}
lseek(fd, 0L, 0);
if((b2 = malloc(len)) == 0){
Fprint(2, "malloc(%d) failed\n", len);
exit(1);
}
for(p = b2, cd = 0; cd < len;){
n = 1000*nrand(6) + nrand(199);
if(n > len-cd) n = len-cd;
Fprint(1, "%d getchars\n", n);
cd += n;
while(n--)
*p++ = Fgetc(fd);
if(cd == len)
continue;
n = 1000*nrand(12) + nrand(199);
if(n > len-cd) n = len-cd;
cd += n;
Fprint(1, "%d read\n", n);
if(Fread(fd, p, (long)n) != (long)n) break;
p += n;
}
done:
if(memcmp(b1, b2, len)){
Fprint(2, "memcmp failed!\n");
exit(1);
}
Fprint(2, "tstrd: %d bytes, succeeded\n", len);
exit(0);
}
#include <sys/types.h>
#include <sys/stat.h>
flen(s)
char *s;
{
struct stat sb;
int n;
if(stat(s, &sb) < 0){
perror(s);
exit(1);
}
n = sb.st_size;
if(sizeof(int) == 2)
n &= 0x7FFF;
return(n);
}