Annotation of embedtools/src/direr.c, revision 1.4
1.2 misho 1: /*************************************************************************
2: * (C) 2010 AITNET - Sofia/Bulgaria - <office@aitbg.com>
3: * by Michael Pounov <misho@aitbg.com>
4: *
5: * $Author: misho $
1.4 ! misho 6: * $Id: direr.c,v 1.3.4.5 2014/02/04 16:56:31 misho Exp $
1.2 misho 7: *
1.3 misho 8: *************************************************************************
9: The ELWIX and AITNET software is distributed under the following
10: terms:
11:
12: All of the documentation and software included in the ELWIX and AITNET
13: Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>
14:
1.4 ! misho 15: Copyright 2004 - 2014
1.3 misho 16: by Michael Pounov <misho@elwix.org>. All rights reserved.
17:
18: Redistribution and use in source and binary forms, with or without
19: modification, are permitted provided that the following conditions
20: are met:
21: 1. Redistributions of source code must retain the above copyright
22: notice, this list of conditions and the following disclaimer.
23: 2. Redistributions in binary form must reproduce the above copyright
24: notice, this list of conditions and the following disclaimer in the
25: documentation and/or other materials provided with the distribution.
26: 3. All advertising materials mentioning features or use of this software
27: must display the following acknowledgement:
28: This product includes software developed by Michael Pounov <misho@elwix.org>
29: ELWIX - Embedded LightWeight unIX and its contributors.
30: 4. Neither the name of AITNET nor the names of its contributors
31: may be used to endorse or promote products derived from this software
32: without specific prior written permission.
33:
34: THIS SOFTWARE IS PROVIDED BY AITNET AND CONTRIBUTORS ``AS IS'' AND
35: ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
36: IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
37: ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
38: FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
39: DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
40: OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
41: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
42: LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
43: OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
44: SUCH DAMAGE.
45: */
1.2 misho 46: #include "global.h"
47:
48:
49: extern char compiled[], compiledby[], compilehost[];
50:
51: static void
52: Usage()
53: {
54: printf( "-= Direr =- Tool for compare directories by checksum\n"
55: "=== %s === %s@%s ===\n\n"
56: " Syntax: direr [options] <dir> [cmp_dir]\n\n"
1.4 ! misho 57: "\t-q\t\t\tQuiet mode\n"
1.2 misho 58: "\t-s <cksum>\t\tCompare dir with this checksum ...\n"
59: "\n", compiled, compiledby, compilehost);
60: }
61:
62: int
63: main(int argc, char **argv)
64: {
1.4 ! misho 65: u_char *md[2], mode = 0, quiet = 0;
1.2 misho 66: char szCmp[MAXPATHLEN], *str[2], ch;
67: int ret = 0;
1.4 ! misho 68: ait_val_t v = AIT_VAL_INITIALIZER(v);
1.2 misho 69:
70: memset(md, 0, sizeof md);
71: memset(str, 0, sizeof str);
72: memset(szCmp, 0, MAXPATHLEN);
1.4 ! misho 73: while ((ch = getopt(argc, argv, "hqs:")) != -1)
1.2 misho 74: switch (ch) {
75: case 's':
1.4 ! misho 76: str[1] = e_strdup(optarg);
1.2 misho 77: mode = 1;
78: break;
1.4 ! misho 79: case 'q':
! 80: quiet = 1;
! 81: break;
1.2 misho 82: case 'h':
83: default:
84: Usage();
85: return 1;
86: }
87: argc -= optind;
88: argv += optind;
89:
90: if (argc < 1) {
91: Usage();
92: return 1;
93: }
94: if (argc > 1) {
95: strlcpy(szCmp, argv[1], MAXPATHLEN);
96: mode |= 2;
97: }
98:
1.4 ! misho 99: if (sync_dirChkSum(argv[0], &md[0]) == -1) {
! 100: ELIBERR(sync);
1.2 misho 101: return 1;
102: }
1.4 ! misho 103: AIT_SET_BUF(&v, md[0], MD5_DIGEST_LENGTH);
! 104: str[0] = str_Dig2Hex(&v);
! 105: AIT_FREE_VAL(&v);
1.2 misho 106: if (!str[0]) {
1.4 ! misho 107: e_free(md[0]);
1.2 misho 108: return 1;
109: }
1.4 ! misho 110: if (!quiet)
! 111: printf("1.Directory '%s': %s\n", argv[0], str[0]);
1.2 misho 112:
113: if (mode & 1 && *str[1]) {
114: ret |= !strcmp((char*) str[0], (char*) str[1]) << 1;
1.4 ! misho 115: if (!quiet)
! 116: printf("Result checksum:: %s %s %s\n\n", str[0],
! 117: ret & 2 ? "==" : "!=", str[1]);
! 118: e_free(str[1]);
1.2 misho 119: }
120:
121: if (mode & 2 && *szCmp) {
1.4 ! misho 122: if (sync_dirChkSum(szCmp, &md[1]) == -1) {
! 123: ELIBERR(sync);
1.2 misho 124: return 1;
125: }
1.4 ! misho 126: AIT_SET_BUF(&v, md[1], MD5_DIGEST_LENGTH);
! 127: str[1] = str_Dig2Hex(&v);
! 128: AIT_FREE_VAL(&v);
1.2 misho 129: if (!str[1]) {
1.4 ! misho 130: e_free(md[0]);
! 131: e_free(str[0]);
! 132: e_free(md[1]);
1.2 misho 133: return 1;
134: }
1.4 ! misho 135: if (!quiet)
! 136: printf("2.Directory '%s': %s\n", szCmp, str[1]);
1.2 misho 137:
138: ret |= (!strcmp((char*) str[0], (char*) str[1]) << 2);
1.4 ! misho 139: if (!quiet)
! 140: printf("Result directory:: %s %s %s\n\n", argv[0],
! 141: ret & 4 ? "==" : "!=", szCmp);
! 142: e_free(str[1]);
! 143: e_free(md[1]);
1.2 misho 144: }
145:
1.4 ! misho 146: e_free(str[0]);
! 147: e_free(md[0]);
1.2 misho 148: return ret;
149: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>