Fixed bug about file content comparison.
This commit is contained in:
parent
9e2e5817e6
commit
2f28ad5c65
@ -88,7 +88,7 @@ int Compare_2_files(char *adr1, char *adr2, char *adrc, int flag)
|
|||||||
differs= 1;
|
differs= 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(S_ISREG(s2.st_mode) && s1.st_size!= s2.st_size) {
|
if(S_ISREG(s2.st_mode) && s1.st_size != s2.st_size) {
|
||||||
printf("%s : st_size : %.f <> %.f\n",
|
printf("%s : st_size : %.f <> %.f\n",
|
||||||
a, (double) s1.st_size, (double) s2.st_size);
|
a, (double) s1.st_size, (double) s2.st_size);
|
||||||
differs= 1;
|
differs= 1;
|
||||||
@ -118,7 +118,7 @@ int Compare_2_files(char *adr1, char *adr2, char *adrc, int flag)
|
|||||||
printf("- %s : cannot open() : %s\n", adr1, strerror(errno));
|
printf("- %s : cannot open() : %s\n", adr1, strerror(errno));
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
fd2= open(adr1, O_RDONLY);
|
fd2= open(adr2, O_RDONLY);
|
||||||
if(fd2==-1) {
|
if(fd2==-1) {
|
||||||
printf("- %s : cannot open() : %s\n", adr2, strerror(errno));
|
printf("- %s : cannot open() : %s\n", adr2, strerror(errno));
|
||||||
close(fd1);
|
close(fd1);
|
||||||
@ -132,18 +132,25 @@ int Compare_2_files(char *adr1, char *adr2, char *adrc, int flag)
|
|||||||
if((r1==EOF && r2==EOF) || (r1==0 && r2==0))
|
if((r1==EOF && r2==EOF) || (r1==0 && r2==0))
|
||||||
break;
|
break;
|
||||||
if(r1==EOF || r1==0) {
|
if(r1==EOF || r1==0) {
|
||||||
printf("- %s : early EOF after %d bytes\n", adr1, r1count);
|
if(r1==EOF)
|
||||||
|
r1= 0;
|
||||||
|
if(s1.st_size > r1count + r1)
|
||||||
|
printf("- %s : early EOF after %d bytes\n", adr1, r1count);
|
||||||
differs= 1;
|
differs= 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
r1count+= r1;
|
r1count+= r1;
|
||||||
if(r2==EOF || r2<r1) {
|
if(r2==EOF || r2<r1) {
|
||||||
printf("- %s : early EOF after %d bytes\n", adr2, r2count);
|
if(r2==EOF)
|
||||||
|
r2= 0;
|
||||||
|
if(s2.st_size > r2count + r2)
|
||||||
|
printf("- %s : early EOF after %d bytes\n", adr2, r2count);
|
||||||
differs= 1;
|
differs= 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(r2>r1) {
|
if(r2>r1) {
|
||||||
printf("- %s : early EOF after %d bytes\n", adr1, r1count);
|
if(s1.st_size > r1count + r1)
|
||||||
|
printf("- %s : early EOF after %d bytes\n", adr1, r1count);
|
||||||
differs= 1;
|
differs= 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -157,8 +164,9 @@ int Compare_2_files(char *adr1, char *adr2, char *adrc, int flag)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(diffcount>0) {
|
if(diffcount>0) {
|
||||||
printf("%s : Content differs by %.f bytes. First at %.f\n",
|
printf("%s : %s : differs by at least %.f bytes. First at %.f\n",
|
||||||
a, (double) diffcount, (double) first_diff);
|
a, (s1.st_size==s2.st_size || s1.st_mtime==s2.st_mtime ?
|
||||||
|
"CONTENT":"content"), (double) diffcount, (double) first_diff);
|
||||||
differs= 1;
|
differs= 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -170,13 +178,21 @@ int Compare_2_files(char *adr1, char *adr2, char *adrc, int flag)
|
|||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret, i, with_ctime= 1;
|
||||||
char adr1[4096], adr2[4096], adrc[4096];
|
char adr1[4096], adr2[4096], adrc[4096];
|
||||||
|
|
||||||
if(argc<4) {
|
if(argc<4) {
|
||||||
fprintf(stderr, "usage: %s path prefix1 prefix2\n", argv[0]);
|
fprintf(stderr, "usage: %s path prefix1 prefix2\n", argv[0]);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
|
for(i= 4; i<argc; i++) {
|
||||||
|
if(strcmp(argv[i], "-no_ctime")==0)
|
||||||
|
with_ctime= 0;
|
||||||
|
else {
|
||||||
|
fprintf(stderr, "%s : Option not recognized: '%s'\n", argv[0], argv[i]);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(strncmp(argv[1], argv[2], strlen(argv[2]))!=0) {
|
if(strncmp(argv[1], argv[2], strlen(argv[2]))!=0) {
|
||||||
fprintf(stderr, "%s: path '%s' does not match prefix1 '%s'\n",
|
fprintf(stderr, "%s: path '%s' does not match prefix1 '%s'\n",
|
||||||
@ -187,7 +203,7 @@ int main(int argc, char **argv)
|
|||||||
strcpy(adrc, argv[1]+strlen(argv[2]));
|
strcpy(adrc, argv[1]+strlen(argv[2]));
|
||||||
sprintf(adr2, "%s%s%s", argv[3], (adrc[0]=='/' ? "" : "/"), adrc);
|
sprintf(adr2, "%s%s%s", argv[3], (adrc[0]=='/' ? "" : "/"), adrc);
|
||||||
|
|
||||||
ret= Compare_2_files(adr1, adr2, adrc, 2);
|
ret= Compare_2_files(adr1, adr2, adrc, (with_ctime<<1));
|
||||||
exit(ret<=0);
|
exit(ret<=0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user