- uint8_t buf[65536]; SHA1 sha1;
- while( (len=read(fd,buf,sizeof(buf))) > 0 ) {
- sha1.addBytes(buf, len);
+ uint8_t *bfr = 0;
+ int64_t bfrsz = 0;
+ int64_t pagsz = sysconf(_SC_PAGE_SIZE);
+ int64_t maxsz = 1024*pagsz;
+ int64_t size = st.st_size, pos = 0;
+ SHA1 sha1;
+ while( (bfrsz = size-pos) > 0 ) {
+ if( bfrsz > maxsz ) bfrsz = maxsz;
+ bfr = (uint8_t *)mmap(NULL, bfrsz, PROT_READ,
+ MAP_PRIVATE+MAP_NORESERVE+MAP_POPULATE, fd, pos);
+ if( bfr == MAP_FAILED ) break;
+ sha1.addBytes(bfr, bfrsz);
+ munmap(bfr, bfrsz);
+ pos += bfrsz;