9 #define CMP_BUFSIZE 65536
11 char buf1
[CMP_BUFSIZE
];
12 char buf2
[CMP_BUFSIZE
];
14 int main(int argc
, char **argv
) {
15 int c
,lflag
=0,sflag
=0,ret
=0;
16 int linenum
=1,bytenum
=1;
20 while((c
=getopt(argc
,argv
,"ls"))!=-1) {
26 fprintf(stderr
,"%s: unrecognised option '%c'\n",argv
[0],optopt
);
31 fprintf(stderr
,"%s: s and l options are mutually exclusive\n",argv
[0]);
35 fprintf(stderr
,"usage: %s [-l | -s] file1 file2\n",argv
[0]);
38 if(!(f1
=fopen(argv
[optind
++],"rb"))||!(f2
=fopen(argv
[optind
++],"rb"))) {
39 fprintf(stderr
,"%s: cannot open %s: %s\n",argv
[0],argv
[optind
-1],strerror(errno
));
42 while((l1
=fread(buf1
,1,CMP_BUFSIZE
,f1
))&&(l2
=fread(buf2
,1,CMP_BUFSIZE
,f2
))) {
43 for(i
=0;l1
&&l2
;i
++,l1
--,l2
--) {
44 if(buf1
[i
]!=buf2
[i
]) {
47 printf("%s %s differ: char %d, line %d\n",argv
[optind
-2],argv
[optind
-1],bytenum
+i
,linenum
);
53 printf("%d %o %o\n",bytenum
+i
,buf1
[i
],buf2
[i
]);
57 if(buf1
[i
]=='\n') linenum
++;
60 printf("cmp: EOF on %s\n",argv
[optind
-1]);
62 } else if(l2
&& !sflag
) {
63 printf("cmp: EOF on %s\n",argv
[optind
-2]);