7 static void *map_file(char *fname, size_t *size)
9 int fd = open(fname, O_RDONLY);
14 p = mmap(0, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
21 static int block_match(unsigned char *p1, unsigned char *p2)
25 if (memcmp(p1, p2, 512) == 0) return 512;
26 for (i=0;i<512;i++) if (p1[i] && p1[i] != 0xff && p1[i] == p2[i]) ret++;
30 static int best_block(char *p1, char *p2, int nblocks, int *x, int hint)
35 for (i=0; i<nblocks && bestv < 512; i++) {
41 v = block_match(p1, p2+ri*512);
50 v = block_match(p1, p2+ri*512);
61 int main(int argc, char *argv[])
68 static char zblock[512];
70 p1 = map_file(argv[1], &size1);
71 p2 = map_file(argv[2], &size2);
76 for (i=0;i<blocks1;i++) {
78 if (memcmp(p1+i*512, zblock, 512) == 0) continue;
79 j = best_block(p1+i*512, p2, blocks2, &v, i);
80 printf("block %d best is %d\tv=%d\tdiff=%d\n",