Annotation of embedtools/src/direr.c, revision 1.1.2.2
1.1.2.1 misho 1: /*************************************************************************
2: * (C) 2010 AITNET - Sofia/Bulgaria - <office@aitbg.com>
3: * by Michael Pounov <misho@aitbg.com>
4: *
5: * $Author: misho $
1.1.2.2 ! misho 6: * $Id: direr.c,v 1.1.2.1 2010/07/12 15:20:41 misho Exp $
1.1.2.1 misho 7: *
8: *************************************************************************/
9: #include "global.h"
10:
11:
12: extern char compiled[], compiledby[], compilehost[];
13:
14: static void
15: Usage()
16: {
17: printf( "-= Direr =- Tool for compare directories by checksum\n"
18: "=== %s === %s@%s ===\n\n"
19: " Syntax: direr [options] <dir> [cmp_dir]\n\n"
20: "\t-s <cksum>\t\tCompare dir with this checksum ...\n"
21: "\n", compiled, compiledby, compilehost);
22: }
23:
24: int
25: main(int argc, char **argv)
26: {
27: u_char *md[2], mode = 0;
28: char szCmp[MAXPATHLEN], *str[2], ch;
29: int ret = 0;
30:
31: memset(md, 0, sizeof md);
32: memset(str, 0, sizeof str);
33: memset(szCmp, 0, MAXPATHLEN);
34: while ((ch = getopt(argc, argv, "hs:")) != -1)
35: switch (ch) {
36: case 's':
37: str[1] = strdup(optarg);
38: mode = 1;
39: break;
40: case 'h':
41: default:
42: Usage();
43: return 1;
44: }
45: argc -= optind;
46: argv += optind;
47:
48: if (argc < 1) {
49: Usage();
50: return 1;
51: }
52: if (argc > 1) {
53: strlcpy(szCmp, argv[1], MAXPATHLEN);
54: mode |= 2;
55: }
56:
1.1.2.2 ! misho 57: if (sync_dirCSum(argv[0], &md[0]) == -1) {
! 58: printf("Error:: %s(%d) #%d - %s\n", __func__, __LINE__, errno, strerror(errno));
1.1.2.1 misho 59: return 1;
1.1.2.2 ! misho 60: }
! 61: str[0] = io_Hex2Ch(md[0], MD5_DIGEST_LENGTH);
! 62: if (!str[0]) {
1.1.2.1 misho 63: free(md[0]);
64: return 1;
65: }
66: printf("1.Directory '%s': %s\n", argv[0], str[0]);
67:
68: if (mode & 1 && *str[1]) {
69: ret |= !strcmp((char*) str[0], (char*) str[1]) << 1;
70: printf("Result checksum:: %s %s %s\n\n", str[0], ret & 1 ? "==" : "!=", str[1]);
71: free(str[1]);
72: }
73:
74: if (mode & 2 && *szCmp) {
1.1.2.2 ! misho 75: if (sync_dirCSum(szCmp, &md[1]) == -1) {
! 76: printf("Error:: %s(%d) #%d - %s\n", __func__, __LINE__, errno, strerror(errno));
1.1.2.1 misho 77: return 1;
1.1.2.2 ! misho 78: }
! 79: str[1] = io_Hex2Ch(md[1], MD5_DIGEST_LENGTH);
! 80: if (!str[1]) {
1.1.2.1 misho 81: free(md[0]);
82: free(str[0]);
83: free(md[1]);
84: return 1;
85: }
86: printf("2.Directory '%s': %s\n", szCmp, str[1]);
87:
88: ret |= (!strcmp((char*) str[0], (char*) str[1]) << 2);
89: printf("Result directory:: %s %s %s\n\n", argv[0], ret & 2 ? "==" : "!=", szCmp);
90:
91: if (str[1])
92: free(str[1]);
93: if (md[1])
94: free(md[1]);
95: }
96:
97: if (str[0])
98: free(str[0]);
99: if (md[0])
100: free(md[0]);
101: return ret;
102: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>