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>