/*************************************************************************
* (C) 2010 AITNET - Sofia/Bulgaria - <office@aitbg.com>
* by Michael Pounov <misho@aitbg.com>
*
* $Author: misho $
* $Id: direr.c,v 1.2 2011/06/08 12:45:41 misho Exp $
*
*************************************************************************/
#include "global.h"
extern char compiled[], compiledby[], compilehost[];
static void
Usage()
{
printf( "-= Direr =- Tool for compare directories by checksum\n"
"=== %s === %s@%s ===\n\n"
" Syntax: direr [options] <dir> [cmp_dir]\n\n"
"\t-s <cksum>\t\tCompare dir with this checksum ...\n"
"\n", compiled, compiledby, compilehost);
}
int
main(int argc, char **argv)
{
u_char *md[2], mode = 0;
char szCmp[MAXPATHLEN], *str[2], ch;
int ret = 0;
memset(md, 0, sizeof md);
memset(str, 0, sizeof str);
memset(szCmp, 0, MAXPATHLEN);
while ((ch = getopt(argc, argv, "hs:")) != -1)
switch (ch) {
case 's':
str[1] = strdup(optarg);
mode = 1;
break;
case 'h':
default:
Usage();
return 1;
}
argc -= optind;
argv += optind;
if (argc < 1) {
Usage();
return 1;
}
if (argc > 1) {
strlcpy(szCmp, argv[1], MAXPATHLEN);
mode |= 2;
}
if (sync_dirCSum(argv[0], &md[0]) == -1) {
printf("Error:: %s(%d) #%d - %s\n", __func__, __LINE__, errno, strerror(errno));
return 1;
}
str[0] = io_Hex2Ch(md[0], MD5_DIGEST_LENGTH);
if (!str[0]) {
free(md[0]);
return 1;
}
printf("1.Directory '%s': %s\n", argv[0], str[0]);
if (mode & 1 && *str[1]) {
ret |= !strcmp((char*) str[0], (char*) str[1]) << 1;
printf("Result checksum:: %s %s %s\n\n", str[0], ret & 2 ? "==" : "!=", str[1]);
free(str[1]);
}
if (mode & 2 && *szCmp) {
if (sync_dirCSum(szCmp, &md[1]) == -1) {
printf("Error:: %s(%d) #%d - %s\n", __func__, __LINE__, errno, strerror(errno));
return 1;
}
str[1] = io_Hex2Ch(md[1], MD5_DIGEST_LENGTH);
if (!str[1]) {
free(md[0]);
free(str[0]);
free(md[1]);
return 1;
}
printf("2.Directory '%s': %s\n", szCmp, str[1]);
ret |= (!strcmp((char*) str[0], (char*) str[1]) << 2);
printf("Result directory:: %s %s %s\n\n", argv[0], ret & 4 ? "==" : "!=", szCmp);
if (str[1])
free(str[1]);
if (md[1])
free(md[1]);
}
if (str[0])
free(str[0]);
if (md[0])
free(md[0]);
return ret;
}
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>