Annotation of embedtools/src/direr.c, revision 1.3
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.3 ! misho 6: * $Id: direr.c,v 1.2.2.2 2012/04/05 12:27:52 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:
! 15: Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
! 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"
57: "\t-s <cksum>\t\tCompare dir with this checksum ...\n"
58: "\n", compiled, compiledby, compilehost);
59: }
60:
61: int
62: main(int argc, char **argv)
63: {
64: u_char *md[2], mode = 0;
65: char szCmp[MAXPATHLEN], *str[2], ch;
66: int ret = 0;
67:
68: memset(md, 0, sizeof md);
69: memset(str, 0, sizeof str);
70: memset(szCmp, 0, MAXPATHLEN);
71: while ((ch = getopt(argc, argv, "hs:")) != -1)
72: switch (ch) {
73: case 's':
74: str[1] = strdup(optarg);
75: mode = 1;
76: break;
77: case 'h':
78: default:
79: Usage();
80: return 1;
81: }
82: argc -= optind;
83: argv += optind;
84:
85: if (argc < 1) {
86: Usage();
87: return 1;
88: }
89: if (argc > 1) {
90: strlcpy(szCmp, argv[1], MAXPATHLEN);
91: mode |= 2;
92: }
93:
94: if (sync_dirCSum(argv[0], &md[0]) == -1) {
95: printf("Error:: %s(%d) #%d - %s\n", __func__, __LINE__, errno, strerror(errno));
96: return 1;
97: }
98: str[0] = io_Hex2Ch(md[0], MD5_DIGEST_LENGTH);
99: if (!str[0]) {
100: free(md[0]);
101: return 1;
102: }
103: printf("1.Directory '%s': %s\n", argv[0], str[0]);
104:
105: if (mode & 1 && *str[1]) {
106: ret |= !strcmp((char*) str[0], (char*) str[1]) << 1;
107: printf("Result checksum:: %s %s %s\n\n", str[0], ret & 2 ? "==" : "!=", str[1]);
108: free(str[1]);
109: }
110:
111: if (mode & 2 && *szCmp) {
112: if (sync_dirCSum(szCmp, &md[1]) == -1) {
113: printf("Error:: %s(%d) #%d - %s\n", __func__, __LINE__, errno, strerror(errno));
114: return 1;
115: }
116: str[1] = io_Hex2Ch(md[1], MD5_DIGEST_LENGTH);
117: if (!str[1]) {
118: free(md[0]);
119: free(str[0]);
120: free(md[1]);
121: return 1;
122: }
123: printf("2.Directory '%s': %s\n", szCmp, str[1]);
124:
125: ret |= (!strcmp((char*) str[0], (char*) str[1]) << 2);
126: printf("Result directory:: %s %s %s\n\n", argv[0], ret & 4 ? "==" : "!=", szCmp);
127:
128: if (str[1])
129: free(str[1]);
130: if (md[1])
131: free(md[1]);
132: }
133:
134: if (str[0])
135: free(str[0]);
136: if (md[0])
137: free(md[0]);
138: return ret;
139: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>