|
|
| version 1.1.2.2, 2010/07/13 15:17:58 | version 1.3.4.4, 2014/02/04 16:52:32 |
|---|---|
| Line 5 | Line 5 |
| * $Author$ | * $Author$ |
| * $Id$ | * $Id$ |
| * | * |
| *************************************************************************/ | ************************************************************************* |
| The ELWIX and AITNET software is distributed under the following | |
| terms: | |
| All of the documentation and software included in the ELWIX and AITNET | |
| Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org> | |
| Copyright 2004 - 2014 | |
| by Michael Pounov <misho@elwix.org>. All rights reserved. | |
| Redistribution and use in source and binary forms, with or without | |
| modification, are permitted provided that the following conditions | |
| are met: | |
| 1. Redistributions of source code must retain the above copyright | |
| notice, this list of conditions and the following disclaimer. | |
| 2. Redistributions in binary form must reproduce the above copyright | |
| notice, this list of conditions and the following disclaimer in the | |
| documentation and/or other materials provided with the distribution. | |
| 3. All advertising materials mentioning features or use of this software | |
| must display the following acknowledgement: | |
| This product includes software developed by Michael Pounov <misho@elwix.org> | |
| ELWIX - Embedded LightWeight unIX and its contributors. | |
| 4. Neither the name of AITNET nor the names of its contributors | |
| may be used to endorse or promote products derived from this software | |
| without specific prior written permission. | |
| THIS SOFTWARE IS PROVIDED BY AITNET AND CONTRIBUTORS ``AS IS'' AND | |
| ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
| IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
| ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | |
| FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
| DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |
| OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |
| HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |
| LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |
| OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |
| SUCH DAMAGE. | |
| */ | |
| #include "global.h" | #include "global.h" |
| Line 17 Usage() | Line 54 Usage() |
| printf( "-= Direr =- Tool for compare directories by checksum\n" | printf( "-= Direr =- Tool for compare directories by checksum\n" |
| "=== %s === %s@%s ===\n\n" | "=== %s === %s@%s ===\n\n" |
| " Syntax: direr [options] <dir> [cmp_dir]\n\n" | " Syntax: direr [options] <dir> [cmp_dir]\n\n" |
| "\t-q\t\t\tQuiet mode\n" | |
| "\t-s <cksum>\t\tCompare dir with this checksum ...\n" | "\t-s <cksum>\t\tCompare dir with this checksum ...\n" |
| "\n", compiled, compiledby, compilehost); | "\n", compiled, compiledby, compilehost); |
| } | } |
| Line 24 Usage() | Line 62 Usage() |
| int | int |
| main(int argc, char **argv) | main(int argc, char **argv) |
| { | { |
| u_char *md[2], mode = 0; | u_char *md[2], mode = 0, quiet = 0; |
| char szCmp[MAXPATHLEN], *str[2], ch; | char szCmp[MAXPATHLEN], *str[2], ch; |
| int ret = 0; | int ret = 0; |
| ait_val_t v = AIT_VAL_INITIALIZER(v); | |
| memset(md, 0, sizeof md); | memset(md, 0, sizeof md); |
| memset(str, 0, sizeof str); | memset(str, 0, sizeof str); |
| memset(szCmp, 0, MAXPATHLEN); | memset(szCmp, 0, MAXPATHLEN); |
| while ((ch = getopt(argc, argv, "hs:")) != -1) | while ((ch = getopt(argc, argv, "hqs:")) != -1) |
| switch (ch) { | switch (ch) { |
| case 's': | case 's': |
| str[1] = strdup(optarg); | str[1] = strdup(optarg); |
| mode = 1; | mode = 1; |
| break; | break; |
| case 'q': | |
| quiet = 1; | |
| break; | |
| case 'h': | case 'h': |
| default: | default: |
| Usage(); | Usage(); |
| Line 54 main(int argc, char **argv) | Line 96 main(int argc, char **argv) |
| mode |= 2; | mode |= 2; |
| } | } |
| if (sync_dirCSum(argv[0], &md[0]) == -1) { | if (sync_dirChkSum(argv[0], &md[0]) == -1) { |
| printf("Error:: %s(%d) #%d - %s\n", __func__, __LINE__, errno, strerror(errno)); | ELIBERR(sync); |
| return 1; | return 1; |
| } | } |
| str[0] = io_Hex2Ch(md[0], MD5_DIGEST_LENGTH); | AIT_SET_BUF(&v, md[0], MD5_DIGEST_LENGTH); |
| str[0] = str_Dig2Hex(&v); | |
| AIT_FREE_VAL(&v); | |
| if (!str[0]) { | if (!str[0]) { |
| free(md[0]); | e_free(md[0]); |
| return 1; | return 1; |
| } | } |
| printf("1.Directory '%s': %s\n", argv[0], str[0]); | if (!quiet) |
| printf("1.Directory '%s': %s\n", argv[0], str[0]); | |
| if (mode & 1 && *str[1]) { | if (mode & 1 && *str[1]) { |
| ret |= !strcmp((char*) str[0], (char*) str[1]) << 1; | ret |= !strcmp((char*) str[0], (char*) str[1]) << 1; |
| printf("Result checksum:: %s %s %s\n\n", str[0], ret & 1 ? "==" : "!=", str[1]); | if (!quiet) |
| free(str[1]); | printf("Result checksum:: %s %s %s\n\n", str[0], |
| ret & 2 ? "==" : "!=", str[1]); | |
| e_free(str[1]); | |
| } | } |
| if (mode & 2 && *szCmp) { | if (mode & 2 && *szCmp) { |
| if (sync_dirCSum(szCmp, &md[1]) == -1) { | if (sync_dirChkSum(szCmp, &md[1]) == -1) { |
| printf("Error:: %s(%d) #%d - %s\n", __func__, __LINE__, errno, strerror(errno)); | ELIBERR(sync); |
| return 1; | return 1; |
| } | } |
| str[1] = io_Hex2Ch(md[1], MD5_DIGEST_LENGTH); | AIT_SET_BUF(&v, md[1], MD5_DIGEST_LENGTH); |
| str[1] = str_Dig2Hex(&v); | |
| AIT_FREE_VAL(&v); | |
| if (!str[1]) { | if (!str[1]) { |
| free(md[0]); | e_free(md[0]); |
| free(str[0]); | e_free(str[0]); |
| free(md[1]); | e_free(md[1]); |
| return 1; | return 1; |
| } | } |
| printf("2.Directory '%s': %s\n", szCmp, str[1]); | if (!quiet) |
| printf("2.Directory '%s': %s\n", szCmp, str[1]); | |
| ret |= (!strcmp((char*) str[0], (char*) str[1]) << 2); | ret |= (!strcmp((char*) str[0], (char*) str[1]) << 2); |
| printf("Result directory:: %s %s %s\n\n", argv[0], ret & 2 ? "==" : "!=", szCmp); | if (!quiet) |
| printf("Result directory:: %s %s %s\n\n", argv[0], | |
| if (str[1]) | ret & 4 ? "==" : "!=", szCmp); |
| free(str[1]); | e_free(str[1]); |
| if (md[1]) | e_free(md[1]); |
| free(md[1]); | |
| } | } |
| if (str[0]) | e_free(str[0]); |
| free(str[0]); | e_free(md[0]); |
| if (md[0]) | |
| free(md[0]); | |
| return ret; | return ret; |
| } | } |