/* here is a very basic program to compare files - chamkila! */
#include
#include
#include
#define ANSI
#ifdef ANSI /* ANSI compatible version */
#include
void closeFiles(FILE* fh, ...);
#else /* UNIX compatible version */
#include
void closeFiles(va_list);
#endif
int compareFiles(char[], char[]);
void printUsage(void);
void displayError(void);
int main (int argc, char* argv[])
{
int rc = errno;
if (argc < 3)
{
printUsage();
return -1;
}
rc = compareFiles(argv[1], argv[2]);
printf("%s: %dn", rc ? "failed" : "success");
return 0;
}
int compareFiles(char arg1[], char arg2[])
{
FILE* fh1 = NULL;
FILE* fh2 = NULL;
char buf1[BUFSIZ] = {''};
char buf2[BUFSIZ] = {''};
if (strlen(arg1) <= 0 || strlen(arg2) <= 0)
{
printUsage();
return -1;
}
if (NULL == (fh1 = fopen(arg1, "r")) || NULL == (fh2 = fopen(arg2, "r")))
{
displayError();
return -1;
}
while (!feof(fh1) && !feof(fh2))
{
fgets(buf1, BUFSIZ - 1, fh1);
fgets(buf2, BUFSIZ - 1, fh2);
if (0 != strcmp(buf1, buf2))
{
printf("file '%s' and file '%s' don't matchn", arg1, arg2);
closeFiles(fh1, fh2);
return -1;
}
else
{
continue;
}
}
printf("file '%s' and file '%s' matchn", arg1, arg2);
closeFiles(fh1, fh2);
return 0;
}
void printUsage(void)
{
printf("usage: fcmp.exe , nn");
}
void displayError()
{
printf("error: %sn", strerror(errno));
return;
}
#ifdef ANSI /* ANSI compatible version */
void closeFiles(FILE* fh, ...)
{
FILE* f = NULL;
va_list argptr;
va_start(argptr, fh);
f = va_arg(argptr, FILE*);
if (NULL != f)
{
fclose(f);
}
va_end (argptr);
return;
}
#else /* UNIX compatible version must use old-style definition. */
void closeFiles(va_alist)
{
FILE* f = NULL;
va_list argptr;
va_start(argptr);
f = va_arg(argptr, FILE*);
if (NULL != f)
{
fclose(f);
}
va_end (argptr);
return;
}
#endif