home *** CD-ROM | disk | FTP | other *** search
- /* Compare two files */
-
- #include <stdio.h>
-
- BOOL check_bufs(char *buf1, char *buf2, int size);
- int filesize(FILE *fp);
- void msg(char *text);
-
- BOOL verbose=1;
-
- int main(int argc, char **argv) {
- FILE *f1,*f2;
- char *buf1,*buf2;
- int count= -1;
- BOOL result=RETURN_OK;
-
- if(argc>2 && argc<5) {
- if(argc==4 && !strcmp(strlwr(argv[3]),"quiet")) verbose=0;
- if(buf1=malloc(10240)) {
- if(buf2=malloc(10240)) {
- if(f1=fopen(argv[1],"rb")) {
- if(f2=fopen(argv[2],"rb")) {
- if(filesize(f1)==filesize(f2)) {
- while(count!=0) {
- count=fread(buf1,1,10240,f1);
- count=fread(buf2,1,10240,f2);
- if(check_bufs(buf1,buf2,count)) {
- result=RETURN_WARN;
- msg("Files contain different data\n");
- break;
- }
- }
- } else {
- msg("Files are of different size\n");
- result=RETURN_WARN;
- }
- fclose(f2);
- } else {
- char str[200];
- sprintf(str,"File %s does not exist!\n",argv[2]);
- msg(str);
- result=RETURN_ERROR;
- }
- fclose(f1);
- } else {
- char str[200];
- sprintf(str,"File %s does not exist!\n",argv[1]);
- msg(str);
- result=RETURN_ERROR;
- }
- free(buf2);
- } else
- result=RETURN_FAIL;
- free(buf1);
- } else
- result=RETURN_FAIL;
- } else {
-
- msg("\tUsage: compare {first file} {second file} [QUIET]\n");
- result=RETURN_FAIL;
- }
-
- if(result==RETURN_OK)
- msg("Files are the same\n");
-
- return(result);
- }
-
- BOOL check_bufs(char *buf1, char *buf2, int size) {
- int i;
- BOOL result=0;
-
- for(i=0; i<size; i++) {
- if(buf1[i]!=buf2[i])
- result=1;
- }
-
- return(result);
- }
-
- int filesize(FILE *fp) {
- long oldpos;
- int length;
-
- oldpos=ftell(fp);
-
- fseek(fp,0,SEEK_END);
- length=ftell(fp);
- fseek(fp,oldpos,SEEK_SET);
-
- return(length);
- }
-
- void msg(char *text) {
- if(verbose) {
- printf("Compare 1.0 by Ben Matthew (31.1.97)\n");
- printf("%s",text);
- }
- }