version 1.1, 2010/07/12 15:20:41
|
version 1.2, 2011/06/08 12:45:41
|
Line 0
|
Line 1
|
|
/************************************************************************* |
|
* (C) 2010 AITNET - Sofia/Bulgaria - <office@aitbg.com> |
|
* by Michael Pounov <misho@aitbg.com> |
|
* |
|
* $Author$ |
|
* $Id$ |
|
* |
|
*************************************************************************/ |
|
#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; |
|
} |