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>